In [12]: A = np.array([[0, 0, 5, 0], [4, 0, 0, 0], [0, 0, 0, 9]])
In [13]: A
Out[13]:
array([[0, 0, 5, 0],
[4, 0, 0, 0],
[0, 0, 0, 9]])
argmax
возвращает индекс самого большого элемента в массиве:
In [14]: np.argmax(A)
Out[14]: 11
In [15]: A.ravel()
Out[15]: array([0, 0, 5, 0, 4, 0, 0, 0, 0, 0, 0, 9])
Без axis
он обрабатывает массив как 1d. С осью это выглядит по строке или столбцу:
In [16]: np.argmax(A, axis=0)
Out[16]: array([1, 0, 0, 2], dtype=int32)
In [17]: np.argmax(A, axis=1)
Out[17]: array([2, 0, 3], dtype=int32)
Добавление значения 100 или произвольного массива изменяет значения в массиве, который видит argmax
. Простое добавление скаляра не меняет местоположение максимального значения. Добавление случайного массива может изменить местоположение.
np.argmax(q_learning_table[state,:] + np.random.randn(1, 4))
есть
arr = q_learning_table[state,:] + np.random.randn(1, 4)
np.argmax(arr)
То есть Python сначала оценивает аргументы и передает результат argmax
. Математика не делается внутри argmax
. Это делается до того, как argmax
будет запущен.
Добавление случайного массива в A
может изменить местоположение максимума:
In [24]: A + np.random.randint(0,20, A.shape)
Out[24]:
array([[ 2, 2, 10, 3],
[ 7, 9, 13, 6],
[ 3, 14, 10, 13]])
In [25]: np.argmax(_)
Out[25]: 9