numpy 維度與軸

2021-08-13 04:42:49 字數 4025 閱讀 1511

albert chen

albert chen 的個人部落格

發表於 2016-09-01

|  

分類於程式語言

|  

我知道 numpy 是多維陣列,但是一直不理解其軸 axis 的概念,以及基於軸之上的計算。今天寫了些例項終於理解了。

首先是維度,對人來說高維空間是很難想象的,但是我們可以從純數學的角度來看。對多維陣列來說,確定最底層的乙個基本元素位置需要用到的索引個數即是維度。

比如說:

1

2

array([[

1,2],

[ 3,

4]])

要獲取 1 的值,我們需要使用a[0][0], 一共用到了兩個座標索引,所以這個陣列的維度是2維,直觀的說陣列的維度就是所有基本元素左邊[個數的最大值。

而每個座標索引可取的值是有範圍的,比如這裡兩個索引都只能取 0 和 1。維度與座標值範圍就組成了多維陣列的shape屬性,它是乙個元組,長度代表了維度,而元組的每乙個值代表了乙個座標索引可取的值個數,所以將shape的所有值乘起來就可以算出多維陣列元素的個數。

對一般的多維陣列來說基本元素即是數字,但數字不一定是基本元素,下邊接著說。

1

2

3

4

5

6

7

8

9

10

>>> a = array([[

1,[1,

2]],[

3,4]])

traceback (most recent call last):

file

"", line

1, in

valueerror: setting an array element

with a sequence.

>>> a = array([[[

1,2],

1],[

3,4]])

>>> a

array([[[

1, 2],

1],[ 3,

4]], dtype=object)

>>> a.shape

( 2,

2)

兩次建立,一次失敗,一次成功,注意到成功的那個多維陣列中dtype=object而且shape(2,2),所以實際上[1,2]這個list是被當做多維陣列的基本元素的。

至於兩次結果不同的原因還不明確,與多維陣列的建立過程有關,待確認。

終於來到比較難懂的軸了,先從座標軸說起。

n 維空間裡有 n 個座標軸,並且座標軸互相垂直,每乙個點相對於一條座標軸都有唯一的乙個座標值。對同一條座標軸來說,座標值相同的點在同乙個 n-1 維的「平面」上。任意取乙個「平面」,我們就能定義「同乙個座標軸上的點」,這些點在「平面」上的投影相同,同乙個座標軸上的點組成的線是與座標軸平行的。而所謂的延軸計算實際上是降維的過程,同乙個座標軸上的點合併成乙個點,這樣n維空間就變成了 n-1 維空間。

具體到 numpy 中的多維陣列來說,軸即是元素座標的索引。比如,第0軸即是第1個索引,延0軸計算就是去掉座標中的第乙個索引。過程就是

遍歷其他索引的所有可能組合

取出乙個組合,保持值不變,遍歷第乙個索引所有可能值

根據索引可以獲得了同乙個軸上的所有元素

對他們進行計算得到最後的元素

所有組合的最後結果組到一起就是最後的 n-1 維陣列

所以如果乙個多維陣列的 shape 是 (a1, a2, a3, a4), 那麼延軸0計算最後的陣列shape 是 (a2, a3, a4), 延軸1計算最後的陣列shape是 (a1, a3, a4)

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

>>> a = array([[[

1,1],[

2,1],[

3,1]],[[

4,1],[

5,1],[

6,1]],[[

7,1],[

8,1],[

9,1]]])

>>> a.shape

( 3,

3, 2)

>>> a

array([[[

1, 1],

[ 2,

1],[ 3,

1]],

[[ 4,

1],[ 5,

1],[ 6,

1]],

[[ 7,

1],[ 8,

1],[ 9,

1]]])

>>> sum(a, axis=

0)array([[

12,

3],[ 15,

3],[ 18,

3]])

>>> sum(a, axis=

1)array([[

6,

3],[ 15,

3],[ 24,

3]])

>>> sum(a, axis=

2)array([[

2,

3,

4],[ 5,

6,

7],[ 8,

9, 10]])

numpy 的列印結果規則是:

最後的軸從左往右列印, 所以「列數」是 shape[-1]

次後的軸從頂向下列印,所以未分割的塊行數是 shape[-2]

剩下的軸從頂向下,每個切片通過乙個空行與下乙個隔開,所以整個的輸出結果可以分成shap[0]塊,然後每一塊又能分成 shape[1]塊

#python

#numpy

#axis

powerdesigner code name comment 互換

物件導向面向卿,不負**不負君。

31日誌 4分類

25標籤

1.維度

2.基本元素3.軸

4.補充

2017

albert chen

由 hexo 強力驅動

主題 -

next.mist

numpy 維度與軸的問題

x np.reshape np.arange 24 2,3,4 也即 2 行 3 列的 4 個平面 plane x array 0,1,2,3 4,5,6,7 8,9,10,11 12,13,14,15 16,17,18,19 20,21,22,23 再來分別看每乙個平面的構成 x 0 array ...

對numpy中軸與維度的理解

numpy s main object is the homogeneous multidimensional arr程式設計客棧ay.it is a table of elements usually numbers all of the same type,indexed by a tuple ...

numpy 軸的理解

在numpy中關於axis的軸有時會有點暈,這裡做下總結 如果axis 0,表示0軸,第乙個維度 axis 1,表示1軸,第二個維度 有點抽象 本地使用jupyter,設沒注釋的為 輸入,注釋部分為輸出 二維 import numpy as np a np.array 1,2,3 4,5,6 a a...