_Оригинальный билет http://projects.scipy.org/numpy/ticket/1316 от 07.12.2009 , 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 ?