淺談Numpy中的shape、reshape函式的區別
[/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.]]])
改變陣列的形狀,並且原始資料不發生變化。但是,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()函式得出的陣列與原陣列使用的是同一個儲存空間,改變一個,另一個也隨之改變。
【注意】shape和reshape()函式都是對於陣列(array)進行操作的,對於list結構是不可以的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2909531/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Numpy中reshape和resize的區別
- 淺談Swift中的函式式Swift函式
- 淺談Kotlin中的函式Kotlin函式
- NumPy之:ndarray中的函式函式
- TypeScript 中函式的理解?與 JavaScript 函式的區別?TypeScript函式JavaScript
- 淺談eval函式函式
- 淺談生成函式函式
- Python中函式和方法的區別Python函式
- 淺談SFTP和FTP的區別FTP
- 淺談let和var的區別
- 淺談src與href的區別
- 淺談C語言中函式的使用C語言函式
- python中的str和repr函式的區別Python函式
- Python資料分析--Numpy常用函式介紹(5)--Numpy中的相關性函式Python函式
- 談談JS中的函式劫持JS函式
- strcpy函式和memcpy函式的區別函式memcpy
- 淺談尤拉函式函式
- tf.shape()和getshape的區別
- 淺談HTTP中GET和POST請求方式的區別HTTP
- 淺談C#中重寫和隱藏的區別C#
- 建構函式與普通函式的區別函式
- 箭頭函式與普通函式的區別函式
- # 普通函式和箭頭函式的區別函式
- $.each()、$.map()區別淺談
- 箭頭函式、簡寫函式、普通函式的區別函式
- Python中Numpy函式詳解Python函式
- 淺談querySelector和getElementById之間的區別
- 淺談TCP和UDP協議的區別TCPUDP協議
- tensor.view(*shape) 函式View函式
- 淺談php count()函式方法PHP函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- StretchBlt函式和BitBlt函式的區別和用法函式
- fill函式與memset函式的區別(c++)函式C++
- 淺談js函式節流和函式防抖JS函式
- 資料庫:淺談DML、DDL、DCL的區別資料庫
- 淺談匿名函式和閉包函式
- 淺談js中的正規表示式JS
- NumPy常用的位運算函式函式