NumPy數組
NumPy數組是一個多維數組對象,稱為ndarray。它由兩部分組成:
- 實際的數據
- 描述這些數據的元數據
大部分的操作只針對於元數據,而不改變底層實際的數據。
關於NumPy數組有以下幾點是必須了解的:
- 數組的下標是從0開始的
- 同一個NumPy數組中所有的元素的類型都必須是相同的。
NumPy數組屬性
在詳細介紹NumPy數組之前。先詳細介紹下NumPy數組的基本屬性。NumPy數組的維數稱為秩(rank),一維數組的秩為1,二維數組的秩為2,以此類推。在NumPy中,每一個線性的數組稱為是一個軸(axes),秩其實是描述軸的數量。比如說,二維數組相當於是兩個一維數組,其中第一個一維數組中每個元素又是一個一維數組。所以一維數組就是NumPy中的軸(axes),第一個軸相當於是底層數組,第二個軸是底層數組里的數組。而軸的數量——秩,就是數組的維數。
NumPy的數組中比較重要ndarray對象屬性有:
-
ndarray.ndim:數組的維數(即數組軸的個數),等於秩。最常見的為二維數組(矩陣)。
-
ndarray.shape:數組的維度。為一個表示數組在每個維度上大小的整數元組。例如二維數組中,表示數組的“行數”和“列數”。ndarray.shape返回一個元組,這個元組的長度就是維度的數目,即ndim屬性。
-
ndarray.size:數組元素的總個數,等於shape屬性中元組元素的乘積。
-
ndarray.dtype:表示數組中元素類型的對象,可使用標准的Python類型創建或指定dtype。另外也可使用前一篇文章中介紹的NumPy提供的數據類型。
-
ndarray.itemsize:數組中每個元素的字節大小。例如,一個元素類型為float64的數組itemsiz屬性值為8(float64占用64個bits,每個字節長度為8,所以64/8,占用8個字節),又如,一個元素類型為complex32的數組item屬性為4(32/8)。
- ndarray.data:包含實際數組元素的緩沖區,由於一般通過數組的索引獲取元素,所以通常不需要使用這個屬性。
創建數組
先介紹一下創建數組。創建數組的方法有很多種。比如可以使用array函數從常規的Python列表和遠足創造數組,所創建的類型由元序列中的元素推到而來
1 import numpy as np#引入模塊 2 a=np.array([2,3,4]) 3 print(a) 4 print(a.dtype)#查看數組的類型 5 b=np.array([1.2,3.5,5.1]) 6 print(b.dtype)
注意使用array函數創建時,參數必須是由方括號括起來的列表,不能使用多個數值作為參數調用array。
1 a=np.array(1,2,3,4)#錯誤 2 a=np.array([1,2,3,4])#正確
可以使用雙重序列來表示二維的數組,三重序列來表示三維數組,以此類推。
1 b=np.array([[1.5,2,3],[4,5,6]]) 2 print(b) 3 print(b.ndim) 4 #兩種方法都可以創建二維 數組 5 6 b=np.array([(1.5,2,3),(4,5,6)]) 7 print(b) 8 print(b.ndim)
可以在創建時顯式指定數組中元素的類型
1 a=np.array([[1,2],[3,4]],dtype=complex) 2 print(a)
通常,剛開始時數組的元素未知,而數組的大小已知。因此,NumPy提供了一些使用占位符創建數組的函數。這些函數有助於滿足除了數組擴展的需要,同時降低了高昂的運算開銷。
用函數zeros可創建一個全是0的數組,用函數ones可創建一個全為1的數組,函數empty創建一個內容隨機並且依賴與內存狀態的數組。默認創建的數組類型(dtype)都是float64。
可以用d.dtype.itemsize來查看數組中元素占用的字節數目。
1 a=np.zeros((3,4)) 2 print(a)
也可以指定類型
1 a=np.zeros((3,4),dtype=int) 2 print(a)
官方文檔 : https://docs.scipy.org/doc/numpy-dev/user/quickstart.html