Numpy: .max() und .min() funktionieren nicht bei Arrays vom Typ 'S' und 'U' (Trac #1316)

Erstellt am 19. Okt. 2012  ·  4Kommentare  ·  Quelle: numpy/numpy

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

Alle 4 Kommentare

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen