_Boleto original http://projects.scipy.org/numpy/ticket/1316 el 2009-12-07 por @mdboom , asignado a unknown._
Ésta es una operación sensata. Sería bueno hacerlo funcionar si fuera posible.
In [25]: x.max()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/wonkabar/data1/builds/betadrizzle/<ipython console> in <module>()
TypeError: cannot perform reduce with flexible type
In [26]: x.min()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/wonkabar/data1/builds/betadrizzle/<ipython console> in <module>()
TypeError: cannot perform reduce with flexible type
In [27]:
Esto debería ser factible. Tenga en cuenta que argmax
y argmin
funcionan y pueden proporcionar una manera fácil de implementar esto sin usar maximum.reduce
.
.max
puede tomar una tupla de ejes, argmax
solo puede manejar un solo axis
, por lo que para que funcione para el caso general se requerirá una gran cantidad de ejes aleatorios y posiblemente copiar para fusionar esos ejes. keepdims
y out
también están en la firma de max
pero no de argmax
. ¿Qué tipos estarían involucrados? ¿'S', 'U' y 'V'?
¿Es este el mismo problema que se describe en el nr.
In [1]: np.array([['dd', 'de', 'cc'], ['ae', 'be', 'hf']]).max(axis=0)
TypeError: cannot perform reduce with flexible type
A la pregunta de @jondo (hace casi 4 años en este momento, pero vale la pena abordarla), sí.
La queja del Dr. Feldman se expresa mejor con un ejemplo. Él dice "Debido a que los métodos .min () y .max () de NumPy funcionan para matrices numéricas, y las funciones min () y max () de Python funcionan para cadenas, uno podría esperar razonablemente que los métodos .min () y .max () de NumPy funcionan para matrices de cadenas, pero no [...] "
He aquí una ilustración:
import numpy as np
arr_str = np.array(["I'm", "Defying", "Gravity"]) #A wickedly simple array of strings
print(arr_str.max()) #raises "TypeError: cannot perform reduce with flexible type"
#Interestingly, when I just used a native Python list, the error for this line was: "AttributeError: 'list' object has no attribute 'max'"
print(max(arr_str)) #does not raise any kind of error and returns "I'm" no matter where it is in the array of strings above
#This code works as expected
arr_num = np.array([1,2,3,-1])
print(max(arr_num))
El problema del Dr. Feldman, como dijo, es sobre matrices de cadenas y querer usar .max () en lugar de max (); pero podemos expandirlo a una preocupación sobre cualquier tipo flexible. Tenga en cuenta que no menciona que max () funciona bien cuando pasamos la matriz como parámetro, pero como puede ver en el ejemplo anterior, funciona.
Verifiqué lo que dijo
Mi pregunta para la comunidad sería: ¿es esto un problema suficiente (tener que usar max (list) o list.argmax) para que valga la pena sumergirse en los problemas del eje que mencionó @jaimefrio ?