_Billet original http://projects.scipy.org/numpy/ticket/1316 le 2009-12-07 par @mdboom , attribué à unknown._
C'est une opération sensée. Ce serait bien de le faire fonctionner si possible.
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]:
Cela devrait être faisable. Notez que argmax
et argmin
fonctionnent et peuvent fournir un moyen simple de l'implémenter sans utiliser maximum.reduce
.
.max
peut prendre un tuple d'axes, argmax
ne peut gérer qu'un seul axis
, donc pour que cela fonctionne pour le cas général, il faudra beaucoup de brassage d'axes , et éventuellement en copiant pour fusionner ces axes. keepdims
et out
sont aussi dans la signature de max
mais pas de argmax
. Quels types seraient impliqués? « S », « U » et « V » ?
Est-ce le même problème que celui décrit au nr.
In [1]: np.array([['dd', 'de', 'cc'], ['ae', 'be', 'hf']]).max(axis=0)
TypeError: cannot perform reduce with flexible type
À la question de @jondo (il y a près de 4 ans à ce stade mais mérite d'être abordée), oui.
La plainte du Dr Feldman est mieux exprimée par un exemple. Il dit "Parce que les méthodes .min() et .max() de NumPy fonctionnent pour les tableaux numériques, et que les fonctions min() et max() de Python fonctionnent pour les chaînes, on peut raisonnablement s'attendre à ce que les méthodes .min() et .max() de NumPy fonctionnent pour des tableaux de chaînes, mais ils ne[...]"
Voici une illustration :
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))
Le problème du Dr Feldman, comme il l'a déclaré, concerne les tableaux de chaînes et souhaite utiliser .max() plutôt que max(); mais nous pouvons l'étendre à une préoccupation concernant n'importe quel type flexible. Notez qu'il ne mentionne pas que max() fonctionne très bien lorsque nous passons le tableau en paramètre, mais comme vous pouvez le voir dans l'exemple ci-dessus, cela fonctionne.
J'ai vérifié ce que @charris a dit, que .argmax() fonctionne.
Ma question pour la communauté serait la suivante : est-ce suffisamment un problème (devoir utiliser max(list) ou list.argmax) pour que cela vaille la peine de plonger dans les problèmes d'axe soulevés par