NumPy: 1、NumPy 是一個功能強大的第三方庫(需要自己安裝),主要用於對多維數組執行計算; 它提供了大量的庫函數和操作,可以幫助程式員更輕鬆地進行數值計算 2、可以和另外兩個第三方庫 SciPy 和 Matplotlib 一起使用從而在一定程度上替換對 Matlab 的使用 3、主要應用: ...
NumPy:
1、NumPy 是一個功能強大的第三方庫(需要自己安裝),主要用於對多維數組執行計算;
它提供了大量的庫函數和操作,可以幫助程式員更輕鬆地進行數值計算
2、可以和另外兩個第三方庫 SciPy 和 Matplotlib 一起使用從而在一定程度上替換對 Matlab 的使用
3、主要應用:
①數學運算:NumPy 對於執行各種數學運算非常有用,如數值積分、微分、內插、外推以及矩陣的內積、外積、特征向量等。
②圖像處理和電腦圖形學:電腦中的圖像表示為多維數字數組。NumPy 成為同樣情況下最自然的選擇。
實際上,NumPy 提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等
③機器學習模型:在編寫機器學習演算法時,需要對矩陣進行各種數值計算。例如矩陣乘法、換位、加法等
NumPy 數組:
1、NumPy 提供最重要的數據結構是一個稱為 ndarray 的 N 維數組類型。 它描述相同類型的元素集合,NumPy 數組是通常的 Python 數組的擴展
ndarray 配備了大量的函數和運算符,可以幫助我們快速編寫各種類型計算的高性能代碼,每個元素在記憶體中使用相同大小的塊
2、NumPy 數組的創建方法:
①從其他 python 數據類型(如:列表、元組等)轉換過來
②NumPy 原生數組的創建(通過 arange、ones、zeros 等創建)
③使用特殊庫函數(例如,random)創建
④從磁碟讀取數組,無論是標準格式還是自定義格式
⑤通過使用字元串或緩衝區從原始位元組創建數組
import numpy as np lst = [1, 2, 3] arr = np.array(lst) # 輸出 Type: <class 'numpy.ndarray'> # arr: [1 2 3] print("Type: ", type(arr), "\narr: ", arr) # numpy.arange(star, end, step) 返回 [star, end) 隔 step-1 的各個元素 # 輸出 [1 3 5 7 9] arr = np.arange(1, 10, 2) print("arr", arr, sep=" = ") # numpy.random.randn(size) 創建一個長度為 size 的服從標準正態分佈的隨機數組 arr = np.random.randn(5) print("arr: ", arr) # numpy.random.random(size) 創建一個範圍為 [0, 1),長度為 size 的服從均勻分佈的隨機數組 arr = np.random.random(5) print("arr: ", arr) # numpy.linspace(star, end, size) 創建一個長度為 size,範圍為 [star, end] 的數組 # 輸出 [0. 2.5 5. 7.5 10.] arr = np.linspace(0, 10, 5) print("arr: ", arr) # numpy.zeros(shape) 創建一個用 0 填充,形狀為 shape 的數組 a = np.zeros((2, 2)) print("a", a, sep=" = ") b = np.ones((2, 2)) print("b", b, sep=" = ") c = np.full((2, 2), 7) # 創建一個 2*2 矩陣,並填充 7 print("c", c, sep=" = ") d = np.eye(3) # 創建一個 3*3 的單位矩陣 print("d", d, sep=" = ")
註:np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 里,
object 表示任何暴露數組介面方法的對象都會返回一個數組或任何(嵌套)序列;
dtype 為數組的數據類型,可選;copy 可選,預設為true,表示對象是否被覆制;order 里 C(按行)、F(按列)或A(任意,預設);
subok 預設情況下,返回的數組被強製為基類數組。 如果為true,則返回子類;ndmin 指定返回數組的最小維數
import numpy as np # 本來是一個一維數組,但通過 ndmin=2 使得數組最小維度為2維 # 輸出 arr: [[1 2 3 4]] 註意為 2 維數組 arr = np.array([1, 2, 3, 4], ndmin=2) print("arr", arr, sep=": ") # 輸出 arr: [[1 2] [3 4]],因為其維度大於最小維度 arr = np.array([[1, 2], [3, 4]], ndmin=1) print("arr", arr, sep=": ") # 指定數據類型為複數 arr = np.array([1, 2, 3], dtype=complex) # 輸出 arr: [1.+0.j 2.+0.j 3.+0.j] print("arr", arr, sep=": ")
3、數組屬性:
①shape:返回數組形狀,如 (2, 3) 表示 2 行 3 列的 2 維數組
②ndim:返回數組維度
③size:返回數組裡元素個數
④itemsize:返回數組中每個元素的位元組單位長度
⑤T:轉置矩陣,但不會改變原矩陣
⑥flags:返回對象的記憶體信息
⑦real:返回元素的實部
⑧imag:返回元素的虛部
⑨data:包含實際數組元素的緩衝區,由於一般通過數組的索引獲取元素,所以通常不需要使用這個屬性
import numpy as np # shape 這一數組屬性返回一個包含數組維度的元組,它也可以用於調整數組大小 arr = np.array([[1, 2, 3], [4, 5, 6]]) arr_t = arr[:, 2] # 輸出列號為 2 的所有元素,即 [3, 6] print("arr_t[][2]: ", arr_t) # 輸出數組形狀,這裡為 (2, 3) print("The arr's shape: ", arr.shape) arr.shape = (3, 2) # 修改形狀為 3 行 2 列,註意形狀和元素個數 print("The new arr: ", arr) # 也可以通過 reshape() 函數來調整大小,但不會改變原數組 temp = arr.reshape(2, 3) print(temp) # 2 維數組,且數組裡有 3 個元素 # ndim 屬性返回數組維度 arr = np.arange(24) # 創建 [0...23] 的數組 print(arr.ndim) # 輸出 1 arr.shape = (2, 4, 3) # 修改為 3 維數組 print("arr's ndim: ", arr.ndim) # 輸出 3 # itemsize 這一數組屬性返回數組中每個元素的位元組單位長度 arr = np.array([1, 2, 3, 4, 5]) print("size: ", arr.size) print("itemsize: ", arr.itemsize) # 輸出 4(整數預設為 4 位元組) # dtype 返回數組元素類型 print("dtype: ", arr.dtype) # 輸出 dtype: int32(即 4 位元組) arr.dtype = np.int8 # 修改整數類型 print("itemsize: ", arr.itemsize) # 輸出 1 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 調用矩陣的 T 屬性,可以轉置這個矩陣,但不會改變原矩陣 print("translate arr: ", arr.T) print("arr: ", arr) # 輸出元素的實虛部 arr = np.array([1+2j, 2+3j, 3+4j]) print("arr's real: ", arr.real) # 輸出 [1. 2. 3.] print("arr's imag: ", arr.imag) # 輸出 [2. 3. 4.] # 輸出對象的記憶體信息 print(arr.flags)
4、數組的簡單運算:
大部分數學運算均只對在相應元素進行,如運算四則運算加減乘除,並且運算支持廣播
(即不同形狀的數組如果符合某種條件則可以進行運算)!
若要進行矩陣乘法則需要函數 dot() 或運算符 @
import numpy as np arr_one = np.array([[1.0, 2.0], [3.0, 4.0]]) arr_two = np.array([[5.0, 6.0], [7.0, 8.0]]) # 四則運算時對應元素進行運算 sum = arr_one + arr_two dif = arr_one - arr_two mul = arr_one * arr_two quo = arr_one / arr_two matrix_product = arr_one.dot(arr_two) # 矩陣乘法 print(("sum: ", sum), ("dif: ", dif), ("mul: ", mul), ("quo: ", quo), sep="\n") print("matrix_product: ", matrix_product) # 大小比較也是通過對應元素進行的 print("arr_one < arr_two = ", arr_one < arr_two) print("arr_one ** 2", arr_one ** 2, sep=" = ") # @ 可以用於矩陣乘法 print("matrix_product: ", arr_one @ arr_two)