Numpy: .max () y .min () no funcionan en matrices de tipo 'S' y 'U' (Trac # 1316)

Creado en 19 oct. 2012  ·  4Comentarios  ·  Fuente: numpy/numpy

_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]:
00 - Bug Other

Todos 4 comentarios

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 ?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

astrofrog picture astrofrog  ·  4Comentarios

Kreol64 picture Kreol64  ·  3Comentarios

keithbriggs picture keithbriggs  ·  3Comentarios

dcsaba89 picture dcsaba89  ·  3Comentarios

'
Pezhvuk picture Pezhvuk  ·  4Comentarios