Numpy: لا يعمل .max () و .min () على المصفوفات من النوع 'S' و 'U' (Trac # 1316)

تم إنشاؤها على ١٩ أكتوبر ٢٠١٢  ·  4تعليقات  ·  مصدر: numpy/numpy

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

ال 4 كومينتر

يجب أن يكون هذا ممكنًا. لاحظ أن 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 ؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات