一、Numpy基礎知識
NumPy是Python科學計算的基礎庫,提供了高性能的多維數組對象及其相關的運算。NumPy的核心理念是ndarray(n-dimensional array)。它是一個由同類型元素組成的多維數組,可以使用基於數組的計算來操作數據,不需要For循環。這種方式高效而簡潔,也更接近於數學或科學的術語和概念。
>>> import numpy as np
>>> array = np.array([1,2,3])
>>> print(array) # [1,2,3]
>>> print(type(array)) # <class 'numpy.ndarray'>
Numpy數組和Python自帶的列表對象類似,但是Numpy數組須具有相同類型的元素,並支持高效的基於數組的計算方法。創建數組時你可以指定dtype(數據類型),不過Numpy會自動推斷出dtype。
>>> array1 = np.array([1, 2, 3, 4])
>>> print(array1) # [1 2 3 4]
>>> print(array1.dtype) # int32
>>> array2 = np.array([1, 2, 3, 4], dtype=float)
>>> print(array2) # [1. 2. 3. 4.]
>>> print(array2.dtype) # float64
二、Numpy數組的形狀和軸
ndarray數組不僅有數據類型而且也有一個shape屬性,即數組的形狀。
>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array) # [[1 2 3]
# [4 5 6]]
>>> print(array.shape) # (2, 3)
數組的軸(axis)是從數組的維度角度來說的。
對於二維數組,第0軸是大小為2(數組的行數),第1軸是大小為3(數組的列數)。
>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array.sum(axis=0)) # [5, 7, 9]
>>> print(array.sum(axis=1)) # [6, 15]
三、Numpy數組的運算
Numpy的優勢在於可以對所有元素進行算術運算,減少常見的for循環操作。
>>> array1 = np.array([1,2,3,4])
>>> array2 = np.array([5,6,7,8])
>>> array3 = np.array([9,10,11,12])
>>> print(array1 + array2) # [ 6 8 10 12]
>>> print(array2 - array1) # [4 4 4 4]
>>> print(array1*array2) # [ 5 12 21 32]
>>> print(array2 / array1) # [5. 3. 2.33333333 2.]
>>> print(array1**array2) # [ 1 64 2187 65536]
>>> print(array210) # [False False True True]
除了基本運算外,NumPy還有其他計算函數。例如,統計函數(如平均值,最大值和標準差)和幾何函數(如花式索引,切片和字符串分類函數)。
>>> array = np.array([1,2,3,4])
>>> print(array.mean()) # 2.5
>>> print(array.max()) # 4
>>> print(array.min()) # 1
>>> print(array.std()) # 1.118033988749895
>>> print(array.argmax()) # 3
>>> print(array.argmin()) # 0
四、Numpy數組的矩陣運算
Numpy除了支持基本運算之外,還支持各種簡單(例如點積)和複雜(例如矩陣分解)運算。
>>> A = np.array([[1.,2.],[3.,4.]])
>>> B = np.array([[5.,6.],[7.,8.]])
>>> print(A.dot(B)) # [[19. 22.]
# [43. 50.]]
>>> print(np.dot(A,B)) # [[19. 22.]
# [43. 50.]]
>>> C = np.array([5.,6.])
>>> print(np.dot(A,C)) # [17. 39.]
五、Numpy數組的索引和切片
NumPy數組的索引方法類似於Python列表。
>>> array = np.array([1,2,3,4])
>>> print(array[0]) # 1
>>> print(array[2]) # 3
>>> print(array[:3]) # [1 2 3]
>>> print(array[-2:]) # [3 4]
>>> array[:2] = 0
>>> print(array) # [0, 0, 3, 4]
對於多維數組,可以使用逗號分隔的索引元組訪問元素。
>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array[0,1]) # 2
>>> print(array[1,2]) # 6
>>> print(array[:, 1:]) # [[2 3]
# [5 6]]
>>> print(array[:2, 1:]) # [[2 3]
# [5 6]]
>>> print(array[1,:2]) # [4 5]
六、Numpy數組的形狀操作
在NumPy中,可以對現有數組進行重新形狀,只需要使用reshape函數即可。
>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> print(array.shape) # (2, 3)
>>> array2 = array.reshape(3,2)
>>> print(array2.shape) # (3, 2)
>>> array3 = array.reshape(6,-1)
>>> print(array3.shape) # (6, 1)
調整數組的形狀時不會更改原始數組的數據。反之,改變了數組中的元素會影響到原始數組。
>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> array2 = array.reshape(3,2)
>>> array[0][1] = 8
>>> print(array2) # [[1 8]
# [3 4]
# [5 6]]
七、Numpy數組的複製
NumPy ndarray對象的複製主要有兩種:深度複製和淺複製。
>>> array = np.array([[1, 2, 3],
[4, 5, 6]])
>>> array2 = array.copy()
>>> array[0][1] = 8
>>> print(array2) # [[1 2 3]
# [4 5 6]]
上述代碼中的array2是array的深複製,所以更改array並不會影響原始數據。
八、Numpy數組的隨機數
NumPy還可以生成隨機數。我們可以使用numpy.random子模塊,它包含我們需要的所有實用程序。
>>> array = np.random.rand(2,2)
>>> print(array) # [[0.91139848 0.81179606]
# [0.84129243 0.94593798]]
>>> array2 = np.random.randn(2,2)
>>> print(array2) # [[-0.1420801 -2.58851948]
# [-0.33879746 1.07524694]]
>>> array3 = np.random.randint(low=1, high=10, size=(2,2))
>>> print(array3) # [[9 6]
# [2 8]]
九、Numpy數組的輸入和輸出
可以將Numpy數組寫入和讀取到磁盤。
>>> array = np.array([1, 2, 3, 4])
>>> np.save('array.npy', array)
>>> array2 = np.load('array.npy')
>>> print(array2) # [1 2 3 4]
如果有多個數組,則可以使用掩碼編碼,然後將多個數組存儲到單個文件中。
>>> array1 = np.array([1, 2, 3, 4])
>>> array2 = np.array([5, 6, 7, 8])
>>> np.savez('arrays.npz', x=array1, y=array2)
>>> data = np.load('arrays.npz')
>>> print(data['x']) # [1 2 3 4]
>>> print(data['y']) # [5 6 7 8]
十、Numpy的應用及拓展
Numpy的基本知識讓我們能夠建立數組和矩陣做統計分析或者圖像處理等一些應用,以及在神經網絡中需要對數據進行處理。
除此之外,擴展界面在dataframe(數據幀),時間序列分析,科學技術計算領域也可以方便調用。
十一、總結
Numpy對於數值計算在python中有着非常重要的作用。它提供了ndarray數據類型,用於高效、便利地處理大量數據的數值計算。
本文介紹了Numpy的基礎知識、數組的形狀和軸、數組的運算、數組的矩陣運算、數組的索引和切片、數組的形狀操作、數組的複製、數組的隨機數、Numpy數組的輸入輸出、各種應用的拓展等重要的方面。
原創文章,作者:BREN,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/138354.html