Подтвердить что ты не робот

Numpy max vs amax против максимума

numpy имеет три разные функции, которые кажутся похожими на то, что они могут использоваться для одних и тех же вещей, за исключением того, что numpy.maximum можно использовать только по типу, тогда как numpy.max и numpy.amax могут использоваться для конкретных осей, или всех элементов. Почему здесь больше, чем просто numpy.max? Есть ли какая-то тонкость в производительности?

(Аналогично для min vs. amin vs. minimum)

4b9b3361

Ответ 1

np.max - это просто псевдоним для np.amax. Эта функция работает только на одном входном массиве и находит значение максимального элемента во всем массиве (возвращает скаляр). В качестве альтернативы он принимает аргумент axis и найдет максимальное значение вдоль оси входного массива (возвращает новый массив).

>>> a = np.array([[0, 1, 6],
                  [2, 4, 1]])
>>> np.max(a)
6
>>> np.max(a, axis=0) # max of each column
array([2, 4, 6])

Поведение np.maximum по умолчанию - это взять два массива и вычислить их максимальный размер элемента. Здесь "совместимый" означает, что один массив может быть передан другому. Например:

>>> b = np.array([3, 6, 1])
>>> c = np.array([4, 2, 9])
>>> np.maximum(b, c)
array([4, 6, 9])

Но np.maximum также является универсальной функцией , что означает, что у нее есть другие функции и методы, которые пригодится при работе с многомерными массивами. Например, вы можете вычислить кумулятивный максимум по массиву (или определенной оси массива):

>>> d = np.array([2, 0, 3, -4, -2, 7, 9])
>>> np.maximum.accumulate(d)
array([2, 2, 3, 3, 3, 7, 9])

Это невозможно в np.max.

Вы можете сделать np.maximum imitate np.max до некоторой степени при использовании np.maximum.reduce:

>>> np.maximum.reduce(d)
9
>>> np.max(d)
9

Базовые тесты показывают, что два подхода сопоставимы по производительности.

Ответ 2

Вы уже сказали, почему np.maximum отличается - он возвращает массив, который является максимальным по элементу между двумя массивами.

Что касается np.amax и np.max: они оба называют одну и ту же функцию - np.max - это просто псевдоним для np.amax, и они вычисляют максимум всех элементов в массиве или вдоль оси массив.

In [1]: import numpy as np

In [2]: np.amax
Out[2]: <function numpy.core.fromnumeric.amax>

In [3]: np.max
Out[3]: <function numpy.core.fromnumeric.amax>