Есть хорошие ответы на визуализацию, однако это может помочь мыслить чисто с аналитической точки зрения.
Вы можете создать массив произвольного размера с помощью numpy. Например, вот 5-мерный массив:
>>> a = np.random.rand(2, 3, 4, 5, 6)
>>> a.shape
(2, 3, 4, 5, 6)
Вы можете получить доступ к любому элементу этого массива, указав индексы. Например, вот первый элемент этого массива:
>>> a[0, 0, 0, 0, 0]
0.0038908603263844155
Теперь, если вы уберете одно из измерений, вы получите количество элементов в этом измерении:
>>> a[0, 0, :, 0, 0]
array([0.00389086, 0.27394775, 0.26565889, 0.62125279])
Когда вы применяете такую функцию, как sum
с параметром axis
, это измерение удаляется и создается массив меньшего размера, чем исходный. Для каждой ячейки в новом массиве оператор получит список элементов и применит функцию редукции, чтобы получить масштабатор.
>>> np.sum(a, axis=2).shape
(2, 3, 5, 6)
Теперь вы можете проверить, что первый элемент этого массива является суммой вышеуказанных элементов:
>>> np.sum(a, axis=2)[0, 0, 0, 0]
1.1647502999560164
>>> a[0, 0, :, 0, 0].sum()
1.1647502999560164
axis=None
имеет особое значение для выравнивания массива и применения функции ко всем числам.
Теперь вы можете подумать о более сложных случаях, когда ось — это не просто число, а кортеж:
>>> np.sum(a, axis=(2,3)).shape
(2, 3, 6)
Обратите внимание, что мы используем ту же технику, чтобы выяснить, как было выполнено это сокращение:
>>> np.sum(a, axis=(2,3))[0,0,0]
7.889432081931909
>>> a[0, 0, :, :, 0].sum()
7.88943208193191
Вы также можете использовать те же рассуждения для добавления измерения в массив вместо уменьшения измерения:
>>> x = np.random.rand(3, 4)
>>> y = np.random.rand(3, 4)
# New dimension is created on specified axis
>>> np.stack([x, y], axis=2).shape
(3, 4, 2)
>>> np.stack([x, y], axis=0).shape
(2, 3, 4)
# To retrieve item i in stack set i in that axis
Надеюсь, это даст вам общее и полное представление об этом важном параметре.
person
Shital Shah
schedule
20.11.2018