一、NumPy初識
NumPy是Python中最流行的科學計算庫之一。它提供多維數組對象和一系列用於處理數組的函數。NumPy的核心是ndarray(n-dimensional array)對象,它是一個大小固定、同一類型元素的多維數組。
在使用NumPy之前,需要先安裝它。使用pip命令可以很輕鬆地安裝它。在終端中輸入以下命令即可:
pip install numpy
成功安裝後,我們可以導入NumPy並查看其版本:
import numpy as np print(np.__version__)
輸出的結果應該類似於「1.16.2」。
二、NumPy數組
NumPy中最重要的對象是ndarray。可以用以下代碼創建一個一維數組:
import numpy as np arr1d = np.array([1, 2, 3, 4, 5]) print(arr1d)
輸出結果:[1 2 3 4 5]
也可以創建二維、三維甚至更高維度的數組。
從列表創建ndarray時,NumPy會嘗試自動推導出數組中元素的類型:
import numpy as np arr1d = np.array([1, 2, 3, 4, 5]) arr2d = np.array([[1, 2, 3], [4, 5, 6]]) arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) print(arr1d.dtype) print(arr2d.dtype) print(arr3d.dtype)
輸出結果:
int64 int64 int64
可以看出,NumPy會嘗試選擇最小的數據類型以儲存數組中的元素。在這個例子中,數組中的元素都是整數,所以NumPy選擇了int64類型。
數組中的元素可以使用下標進行訪問,如:
import numpy as np arr1d = np.array([1, 2, 3, 4, 5]) arr2d = np.array([[1, 2, 3], [4, 5, 6]]) arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) print(arr1d[0]) print(arr2d[0, 1]) print(arr3d[1, 0, 1])
輸出結果:
1 2 6
三、NumPy的高級用法
1、數組操作
數組拼接、分裂、重塑、轉置、展平等操作是NumPy中最常用的操作之一。在此僅介紹其中的一些,更多操作請參考NumPy文檔。
例如,可以使用以下代碼將兩個一維數組沿著列方向拼接:
import numpy as np arr1 = np.array([1,2,3]) arr2 = np.array([4,5,6]) result = np.concatenate([arr1, arr2]) print(result)
輸出結果:[1 2 3 4 5 6]
還可以在二維數組上進行拼接操作,如下:
import numpy as np arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6]]) result = np.concatenate([arr1, arr2], axis=0) print(result)
輸出結果:
[[1 2] [3 4] [5 6]]
還可以使用vstack或hstack函數將數組沿著垂直或水平方向拼接。
重塑數組可以使用reshape函數。例如,可以將一個一維數組重塑為3×3的二維數組:
import numpy as np arr = np.array([1,2,3,4,5,6,7,8,9]) result = arr.reshape((3, 3)) print(result)
輸出結果:
[[1 2 3] [4 5 6] [7 8 9]]
transpos函數可以將數組轉置,如下:
import numpy as np arr = np.arange(9).reshape((3,3)) result = np.transpose(arr) print(result)
輸出結果:
[[0 3 6] [1 4 7] [2 5 8]]
flatten函數可以將多維數組展平為一維數組,如下:
import numpy as np arr = np.arange(9).reshape((3,3)) result = arr.flatten() print(result)
輸出結果:
[0 1 2 3 4 5 6 7 8]
2、數組運算
NumPy提供了大量的數學函數和運算符,可以像操作標量一樣操作數組。
可以使用以下代碼實現數組的加減乘除:
import numpy as np a = np.array([1,2,3]) b = np.array([4,5,6]) print(a + b) print(a - b) print(a * b) print(a / b)
輸出結果:
[5 7 9] [-3 -3 -3] [ 4 10 18] [0.25 0.4 0.5 ]
可以使用以下代碼實現數組的矩陣乘法:
import numpy as np a = np.array([[1,2], [3,4]]) b = np.array([[5,6], [7,8]]) print(np.dot(a, b))
輸出結果:
[[19 22] [43 50]]
3、數組統計
NumPy可以進行各種統計運算,如平均值、標準差、最大值、最小值等。
可以使用以下代碼求數組的平均值、標準差、最大值、最小值:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(np.mean(arr)) print(np.std(arr)) print(np.max(arr)) print(np.min(arr))
輸出結果:
3.0 1.4142135623730951 5 1
除了一維數組之外,NumPy還可以對多維數組進行統計運算。例如,可以使用以下代碼計算二維數組中每一列的平均值:
import numpy as np arr = np.array([[1, 2], [3, 4], [5, 6]]) print(np.mean(arr, axis=0))
輸出結果:
[3. 4.]
4、廣播
廣播是指在對兩個數組進行元素操作時,當數組的形狀不同時,對小數組進行擴張以匹配大數組的形狀。廣播操作可以減少內存使用和運算次數。
以下代碼示例演示了廣播的基本原理:
import numpy as np arr1 = np.array([1,2,3]) arr2 = np.array([4,5,6]) result = arr1 * arr2 print(result)
輸出結果:
[ 4 10 18]
可以看出,數組arr1和arr2的形狀不同,但是它們的元素相乘得到的結果仍然是一個長度為3的數組。
5、隨機數生成
NumPy還提供了大量的隨機數生成函數。隨機數生成函數可以用於模擬隨機數據、生成測試數據等。
以下代碼示例生成20個範圍在0-1之間的隨機數:
import numpy as np result = np.random.rand(20) print(result)
輸出結果:
[0.13966633 0.8146751 0.78852179 0.45093637 0.73117035 0.7654889 0.83504567 0.61635283 0.2246247 0.43220779 0.95162422 0.77052108 0.55811285 0.61789821 0.24398802 0.02599477 0.82493305 0.36772928 0.19407716 0.1476306 ]
6、圖片處理
NumPy還可以用於圖像的處理。下面的這個例子把圖片中的每一個像素都進行了翻轉:
import numpy as np from PIL import Image im = Image.open("test.jpg") im.show() im_arr = np.array(im) im_arr_flip = np.fliplr(im_arr) im_flip = Image.fromarray(im_arr_flip) im_flip.show()
輸出結果:
#顯示原圖 #顯示翻轉後的圖
7、數據存取
NumPy可以方便地將數組保存到文件中,並從文件中讀取數組數據。
以下代碼示例將數組保存到文件中,並從文件中讀取出來:
import numpy as np arr = np.array([1,2,3,4,5]) np.save("arr.npy", arr) arr_loaded = np.load("arr.npy") print(arr_loaded)
輸出結果:
[1 2 3 4 5]
總結
這篇文章介紹了NumPy的基本用法,包括數組的創建、統計、數組運算、廣播、隨機數生成、圖片處理等。NumPy功能非常強大,有助於我們進行高效的科學計算。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242482.html