_Originalticket http://projects.scipy.org/numpy/ticket/1316 vom 2009-12-07 von @mdboom , zugewiesen an unbekannt._
Dies ist eine sinnvolle Operation. Es wäre schön, wenn es funktioniert, wenn möglich.
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]:
Dies sollte machbar sein. Beachten Sie, dass argmax
und argmin
funktionieren und eine einfache Möglichkeit bieten, dies zu implementieren, ohne maximum.reduce
.
.max
kann ein Tupel von Achsen aufnehmen, argmax
kann nur ein einzelnes axis
, und möglicherweise kopieren, um diese Achsen zusammenzuführen. keepdims
und out
sind auch in der Signatur von max
aber nicht von argmax
. Welche Typen wären beteiligt? 'S', 'U' und 'V'?
Ist das das gleiche Problem wie in Nr.
In [1]: np.array([['dd', 'de', 'cc'], ['ae', 'be', 'hf']]).max(axis=0)
TypeError: cannot perform reduce with flexible type
Auf die Frage von @jondo (zu diesem Zeitpunkt vor fast 4 Jahren, aber es lohnt sich, sie anzusprechen): Ja.
Die Beschwerde von Dr. Feldman lässt sich am besten mit einem Beispiel ausdrücken. Er sagt: "Da NumPys .min()- und .max()-Methoden für numerische Arrays funktionieren und Pythons min()- und max()-Funktionen für Strings funktionieren, kann man vernünftigerweise erwarten, dass NumPys .min()- und .max()-Methoden funktionieren für Arrays von Strings, aber sie tun es nicht[...]"
Hier ist eine 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))
Dr. Feldmans Problem, wie er sagte, betrifft Arrays von Strings und möchte .max() anstelle von max() verwenden; aber wir können es auf jeden flexiblen Typ erweitern. Beachten Sie, dass er nicht erwähnt, dass max() gut funktioniert, wenn wir das Array als Parameter übergeben, aber wie Sie aus dem obigen Beispiel sehen können, funktioniert es.
Ich habe überprüft, was @charris gesagt hat, dass .argmax() funktioniert.
Meine Frage an die Community wäre: Ist dies ein Problem genug (entweder max(list) oder list.argmax verwenden zu müssen), dass es sich lohnt, in die Achsenprobleme einzutauchen , die