_Original تذكرة http://projects.scipy.org/numpy/ticket/1316 بتاريخ 2009-12-07 بواسطة mdboom ، مخصصة لـ unknown._
هذه عملية معقولة. سيكون من الجيد أن نجعلها تعمل إذا أمكن ذلك.
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]:
يجب أن يكون هذا ممكنًا. لاحظ أن argmax
و argmin
يعملان وقد يوفران طريقة سهلة لتنفيذ ذلك دون استخدام maximum.reduce
.
يمكن أن يأخذ .max
مجموعة من المحاور ، argmax
يمكنه فقط التعامل مع axis
، لذا فإن جعله يعمل للحالة العامة سيتطلب الكثير من تبديل المحاور ، وربما النسخ لتوحيد تلك المحاور. keepdims
و out
موجودان أيضًا في توقيع max
لكن ليس توقيع argmax
. ما هي الأنواع التي يمكن أن تشارك؟ "S" و "U" و "V"؟
هل هذه هي نفس المشكلة كما هو موضح في العدد .
In [1]: np.array([['dd', 'de', 'cc'], ['ae', 'be', 'hf']]).max(axis=0)
TypeError: cannot perform reduce with flexible type
بالنسبة لسؤالjondo (منذ ما يقرب من 4 سنوات في هذه المرحلة ولكنه يستحق المعالجة) ، نعم.
من الأفضل التعبير عن شكوى الدكتور فيلدمان بمثال. يقول "نظرًا لأن أساليب NumPy .min () و. max () تعمل مع المصفوفات الرقمية ، وأن دالات Python min () و max () تعمل مع السلاسل ، فقد يتوقع المرء بشكل معقول أن تكون أساليب NumPy .min () و .max () تعمل لمصفوفات من السلاسل ، لكنها لا [...] "
فيما يلي توضيح:
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))
قضية الدكتور فيلدمان كما ذكر تتعلق بمصفوفات من السلاسل والرغبة في استخدام .max () بدلاً من max () ؛ ولكن يمكننا توسيعه ليشمل أي نوع مرن. لاحظ أنه لا يذكر أن max () تعمل بشكل جيد عندما نمرر المصفوفة كمعامل ، ولكن كما ترون من المثال أعلاه ، فإنها تعمل.
لقد تحققت مما قاله charris ، أن .argmax () يعمل.
سيكون سؤالي للمجتمع هو: هل هذه مشكلة كافية (الحاجة إلى استخدام max (list) أو list.argmax) تستحق الغوص في قضايا المحور التي أثارهاjaimefrio ؟