筆記 對numpy中shape的理解

2021-07-29 16:01:46 字數 3852 閱讀 1094

環境:windows, python2.7

>>> import numpy as np

>>> a = np.array([2,3,33])

>>> a

array([ 2 3 33 ])

>>> print a

[ 2 3 33 ]

>>> a.shape

(3, )

一維情況中array建立的可以看做list(或一維陣列),建立時用()和[ ]都可以,多維也一樣,兩種方法建立後的輸出顯示結果也相同,這裡使用[ ]進行建立

輸出a的shape會顯示乙個引數,就是這個list中元素個數

建立時也可以直接使用np.zeros([1]),這樣會建立全0的list,或者np.ones([1]),不需要我們輸入資料,見下圖:

>>> a = np.zeros([1])

>>> b = np.ones([1])

>>> print a

[ 0. ]

>>> print b

[ 1. ]

>>> a = np.array([[2,2,2],[3,3,3]])

>>> print a

[[ 2 2 2 ]

[ 3 3 3 ]]

>>> a.shape

(2, 3)

二維情況中array建立的可以看做二維陣列(矩陣),注意建立時需要使用2個[ ],輸出a的shape顯示的(2,3)相當於有2行,每行3個數,使用np.ones建立結果如下:

>>> a = np.ones([2, 3])

>>> print a

[[ 1. 1. 1. ]

[ 1. 1. 1. ]]

多維情況統一使用np.ones進行建立,先看三維情況:

>>> a = np.ones([1,1,1])

>>> print a

[[[ 1.]]]

>>> a = np.ones([1,1,2])

>>> print a

[[[ 1. 1.]]]

>>> a = np.ones([1,2,1])

>>> print a

[[[ 1.]

[ 1.]]]

>>> a = np.ones([2,1,1])

>>> print a

[[[ 1.]]

[[ 1.]]]

從上面的**可以看出,三維情況建立時後面2個引數可以看做是建立二維陣列,第1個引數看做建立的二維陣列的個數,所以建立時輸入的引數為2,3,2時,就相當於建立了2個3行2列的二維陣列,如下:

>>> a = np.ones([2,3,2])

>>> print a

[[[ 1. 1.]

[ 1. 1.]

[ 1. 1.]]

[[ 1. 1.]

[ 1. 1.]

[ 1. 1.]]]

然後看四維情況:

>>> a = np.ones([1,1,1,1])

>>> print a

[[[[ 1.]]]]

>>> a = np.ones([1,1,1,2])

>>> print a

[[[[ 1. 1.]]]]

>>> a = np.ones([1,1,2,1])

>>> print a

[[[[ 1.]

[ 1.]]]]

>>> a = np.ones([1,2,1,1])

>>> print a

[[[[ 1.]]

[[ 1.]]]]

>>> a = np.ones([2,1,1,1])

>>> print a

[[[[ 1.]]]

[[[ 1.]]]]

從上面**可以看出:四維時將第乙個引數設定為2和第二個引數設定為2時,輸出結果中間的空行數量不同,我把它理解成先建立1行1列的二維陣列[[ 1. ]],然後按照第2個引數打包這樣的二維陣列,如果第二個引數是2,則打包2個2維陣列變成[[[ 1. ]],[[ 1. ]]](小包),然後按照第1個引數再打包這樣的包,如果第乙個引數是2,則變成[[[[ 1. ]], [[ 1. ]]], [[[ 1. ]], [[ 1. ]]]](大包),就是下面的結果:

>>> a = np.ones([2,2,1,1])

>>> print a

[[[[ 1.]]

[[ 1.]]]

[[[ 1.]]

[[ 1.]]]]

四維以上的結果也是這麼理解~輸出中區分引數用空行~

然後來看一下特定輸出:

>>> import numpy as np

>>> m = np.ones([2,3,2,3])

>>> print m

[[[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]]

[[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]]]

>>> print m[1,:,:,:]

[[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]]

>>> print m[:,1,:,:]

[[[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]]]

>>> print m[:,:,1,:]

[[[ 1. 1. 1.]

[ 1. 1. 1.]

[ 1. 1. 1.]]

[[ 1. 1. 1.]

[ 1. 1. 1.]

[ 1. 1. 1.]]]

>>> print m[:,:,:,1]

[[[ 1. 1.]

[ 1. 1.]

[ 1. 1.]]

[[ 1. 1.]

[ 1. 1.]

[ 1. 1.]]]

前面print m很好理解~

然後print m[1,:,:,:],:代表預設值(就是一開始你輸入時指定的值),這句**相當於輸出2個包中的第1個包(從0開始計數),這個包裡面有3個小包,小包裡面是2*3的二維陣列,所以結果就是上面的~

然後print m[:,1,:,:],相當於輸出2個大包,每個大包輸出第1個小包,小包裡面是2*3的二維陣列

然後print m[:,:,1,:],相當於輸出2個大包,每個大包輸出3個小包,小包裡面是二維陣列的第1行

然後print m[:,:,:,1],相當於輸出2個大包,每個大包輸出3個小包,小包裡面是1*2的一維陣列

其他結果可以自己去試試~

總結:採用np.array()建立時需要幾個維度就要用幾個[ ]括起來,這種建立方式要給定資料;採用np.ones()或np.zeros()建立分別產生全1或全0的資料,用a.shape會輸出你建立時的輸入,建立時輸入了幾個維度輸出就會用幾個[ ]括起來,shape的返回值是乙個元組,裡面每個數字表示每一維的長度

對numpy中shape的理解

from 環境 windows,python3.5 import numpy as np a np.array 2,3,33 a array 2 3 33 print a 2 3 33 a.shape 3,a.shape 0 3 a.shape 1 traceback most recent cal...

numpy中shape和reshape的用法

1 shape 在python中匯入numpy庫之後,我們可以通過矩陣的屬性shape獲取矩陣的維度。如圖所示 import numpy as np b np.array 1,2,3,4 5,6,7,8 print b print b.shape 輸出行數和列數 print b.shape 0 輸出...

Python的numpy庫中的shape用法

shape函式是numpy.core.fromnumeric中的函式,它的功能是讀取矩陣的維度。例 shape matrixa 返回matrixa的 行數,列數 元組 shape matrixa 0 行數 shape matrixa 1 列數 shape的輸入引數可以使乙個實數,乙個一維列表 陣列 ...