淺談Numpy中的shape、reshape函式的區別

roc_guo發表於2022-08-08

[/yiji]1 shape()函式[/yiji]
讀取矩陣的長度,比如shape[0]就是讀取矩陣第一維度的長度,相當於行數。它的輸入引數可以是一個整數表示維度,也可以是一個矩陣。shape函式返回的是一個元組tuple,表示陣列(矩陣)的維度/ 形狀,例子如下:

  • w.shape[0]返回的是w的行數
  • w.shape[1]返回的是w的列數
  • df.shape():檢視行數和列數
  • 1. 陣列(矩陣)只有一個維度時,shape只有shape[0],返回的是該一維陣列(矩陣)中元素的個數,通俗點說就是返回列數,因為一維陣列只有一行,一維情況中array建立的可以看做list(或一維陣列),建立時用()和[ ]都可以,多維就使用[ ]

>>> a=np.array([1,2])
>>> a
array([1, 2])
>>> a.shape
(2L,)
>>> a.shape[0]
2L
>>> a.shape[1]
IndexError: tuple index out of range   #最後報錯是因為一維陣列只有一個維度,可以用a.shape或a.shape[0]來訪問
  
#這個使用的是兩個()包裹,得到的陣列和前面的一樣
>>> a=np.array((1,2))
>>> a
array([1, 2])

2.陣列有兩個維度(即行和列)時,a.shape返回的元組表示該陣列的行數與列數

#注意二維陣列要用()和[]一起包裹起來,鍵入print a 會得到一個用2個[]包裹的陣列(矩陣)
>>> b=np.array([[1,2,3],[4,5,6]])
>>> b
array([[1, 2, 3],
       [4, 5, 6]])
>>> b.shape
(2L, 3L)

總結:使用np.array()建立陣列時,

一維的可以直接np.array([1,2,3])或者np.array((1,2,3))

二維的要使用np.array([[1,2,3],[1,2,3]]),用一個()和一個[]把要輸入的list包裹起來

三維的要使用np.array([[[1,2,3],[1,2,3]]]),用一個()和兩個[]把要輸入的list包裹起來

>>> a=np.array([[[1,2],[3,4]]])
>>> a
array([[[1, 2],
        [3, 4]]])
>>> a.shape
(1L, 2L, 2L)

返回的元組表示3個維度各包含的元素的個數。所謂元素,在一維時就是元素的個數,二維時表示行數和列數,三維時a.shape【0】表示建立的塊數,a.shape【1】和a.shape【2】表示每一塊(每一塊都是二維的)的行數和列數。

>>> a=np.ones([2,2,3])#建立兩個2行3列的陣列(矩陣)
>>> a
array([[[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]],
  
       [[ 1.,  1.,  1.],
        [ 1.,  1.,  1.]]])
2 reshape()函式

改變陣列的形狀,並且原始資料不發生變化。但是,reshape()函式中的引數需要滿足乘積等於陣列中資料總數.

如:當我們將8個數使用(2,3)重新排列時,python會報錯

import numpy as np
  
a=np.array([1,2,3,4])
b=np.array([[1,2,3,4],[4,5,6,7],[7,8,9,1]])
print("a:\n",a)
print("b:\n",b)
print(b.dtype)
  
a_r=a.reshape((2,2))  
print("a_r:\n",a_r)
d=a.reshape((-1,1))
print("d:\n",d)
e=a.reshape((1,-1))
print("e:\n",e)
#結果如下
a:
 [1 2 3 4]
c:
 [[1 2 3 4]
 [4 5 6 7]
 [7 8 9 1]]
int32
  
a_r:
 [[1 2]
 [3 4]]
d:
 [[1]
 [2]
 [3]
 [4]]
e:
 [[1 2 3 4]]

而且,reshape()函式得出的陣列與原陣列使用的是同一個儲存空間,改變一個,另一個也隨之改變。
淺談Numpy中的shape、reshape函式的區別淺談Numpy中的shape、reshape函式的區別

【注意】shape和reshape()函式都是對於陣列(array)進行操作的,對於list結構是不可以的
淺談Numpy中的shape、reshape函式的區別淺談Numpy中的shape、reshape函式的區別


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2909531/,如需轉載,請註明出處,否則將追究法律責任。

相關文章