numpy.amax
numpy.amax(a, axis=None, out=None, keepdims=<no value>, initial=<no value>)
Функция amax() возвращает максимальное значение в массиве. Параметр axis
позволяет указывать оси, вдоль которых необходим поиск максимальных значений.
Является эквивалентной функции np.max
.
-
- a - массив NumPy или подобный массиву объект.
- Входные данные.
- axis - целое число или кортеж целых чисел, необязательный параметр.
-
Указывает ось или оси по которым выполняется поиск (доступно в NumPy с версии 1.7.0). По умолчанию
axis = None
, что соответствует поиску в массивеa
так, словно он сжат до одной оси. - out - массив NumPy, необязательный параметр.
- Массив в который можно поместить результат функции. Данный массив должен соответствовать форме и типу данных результирующего массива функции. Указание данного параметра, позволяет избежать лишней операции присваивания, тем самым, немного ускоряя работу вашего кода. Полезный параметр, если вы очень часто обращаетесь к функции в цикле.
- keepdims - True или False, необязательный параметр.
- Если данный параметр указан как True, то результат работы функции по указанным осям будет способен к транслированию по исходному массиву, т.е. результат функции оформляется в массив с количеством осей исходного массива. Если параметр установлен в значение False, то результатом работы функции будет либо число, либо одномерный массив чисел.
- initial - число, необязательный параметр.
- Число, которое возвращается, если не найдется большее значение. Этот параметр должен обязательно присутствовать, если в вашем коде возможна передача данной функции пустого массива или пустого среза.
-
- результат - число или массив NumPy
- Если параметр
axis
не указан, то будет возвращено одно число - элемент с максимальным значением в исходном массиве. Если в параметреaxis
указана одна ось, то будет возвращен массив, содержащий максимальные элементы вдоль указанной оси с формойa.ndim - 1
. Если количество указанных осей равно d, то будет возвращен массив с формойa.ndim - d
.
Замечание
Значения np.nan
в исходном массиве не вызывают ошибок. Более того, если массив содержит хоть одно значение np.nan
, то оно будет возвращено. Для игнорирования этих значений можно воспользоваться функцией numpy.nanmax()
.
Если по первой оси входного массива a
располагается всего два элемента (подмассива), то команда np.maximum(a[0], a[1])
окажется быстрее чем np.amax(a, axis = 0)
>>> import numpy as np
>>>
>>> a = np.random.randint(50, size = (2, 2, 4))
>>> a
array([[[46, 8, 23, 49],
[40, 49, 13, 27]],
[[48, 2, 44, 31],
[18, 28, 2, 42]]])
>>>
>>> np.maximum(a[0], a[1])
array([[48, 8, 44, 49],
[40, 49, 13, 42]])
>>>
>>> np.amax(a, axis = 0)
array([[48, 8, 44, 49],
[40, 49, 13, 42]])
Примеры
Применение функции к двумерному массиву:
>>> import numpy as np
>>>
>>> a = np.random.randint(50, size = (5, 5))
>>> a
array([[ 2, 36, 0, 34, 12],
[33, 10, 22, 40, 45],
[46, 25, 26, 12, 22],
[31, 14, 24, 42, 40],
[20, 8, 37, 43, 1]])
>>>
>>> # Максимальное значение массива:
... np.amax(a)
46
>>>
>>> # Максимальное значение каждого столбца:
... np.amax(a, axis = 0)
array([46, 36, 37, 43, 45])
>>>
>>> # Максимальное значение каждой строки:
... np.amax(a, axis = 1)
array([36, 45, 46, 42, 43])
Применение функции к трехмерному массиву:
>>> a = np.random.randint(50, size = (3, 2, 4))
>>> a
array([[[22, 25, 9, 27],
[48, 30, 47, 4]],
[[25, 45, 22, 6],
[35, 38, 40, 46]],
[[26, 13, 22, 7],
[33, 27, 40, 45]]])
>>>
>>> np.amax(a)
48
>>> np.amax(a, axis = 0)
array([[26, 45, 22, 27],
[48, 38, 47, 46]])
>>>
>>> np.amax(a, axis = 1)
array([[48, 30, 47, 27],
[35, 45, 40, 46],
[33, 27, 40, 45]])
>>>
>>> np.amax(a, axis = 1)
array([[48, 30, 47, 27],
[35, 45, 40, 46],
[33, 27, 40, 45]])
>>>
>>> np.amax(a, axis = (0, 1))
array([48, 45, 47, 46])
>>>
>>> np.amax(a, axis = (0, 2))
array([45, 48])
>>>
>>> np.amax(a, axis = (1, 2))
array([48, 46, 45])
Параметр keepdims
позволяет результирующему массиву сохранить форму исходного массива, что, в свою очередь, позволяет в дальнейшем использовать механизм транслирования массивов:
>>> a = np.random.randint(50, size = (3, 3))
>>> a
array([[37, 21, 6],
[49, 17, 11],
[ 2, 41, 37]])
>>>
>>> b = np.amax(a, axis = 0, keepdims = True)
>>> b
array([[49, 41, 37]])
>>>
>>> c = np.amax(a, axis = 1, keepdims = True)
>>> c
array([[37],
[49],
[41]])
>>>
>>>
>>> x = np.zeros((5, 3))
>>> x
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
>>>
>>> y = np.ones((3, 5))
>>> y
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
>>>
>>> x + b
array([[49., 41., 37.],
[49., 41., 37.],
[49., 41., 37.],
[49., 41., 37.],
[49., 41., 37.]])
>>>
>>> y*c
array([[37., 37., 37., 37., 37.],
[49., 49., 49., 49., 49.],
[41., 41., 41., 41., 41.]])
Для массивов, содержащих np.nan
возвращается np.nan
:
>>> a = np.random.rand(4)
>>> a
array([0.77242222, 0.05525359, 0.55541523, 0.16611618])
>>>
>>> a[-1] = np.nan
>>> a
array([0.77242222, 0.05525359, 0.55541523, nan])
>>>
>>> np.amax(a)
nan
>>>
>>> np.nanmax(a)
0.7724222193590267
Если задано значение параметра initial
, то оно будет возвращено, если в массиве или на определенной его оси не окажется элементов с большим значением:
>>> np.amax([], initial = 10)
10.0
>>>
>>> np.amax([1, 2, 3], initial = 10)
10
>>>
>>> np.amax([[20, 21], [8, 9]], axis = 1, initial = 10)
array([21, 10])