NumPy是Python中一個重要的第三方免費開源數值計算庫。它可以高效地處理任意維度的數組,是Python用於進行科學計算的基礎庫之一。在數據分析、機器學習、人工智能等領域得到了廣泛應用。本文將從以下幾個方面介紹NumPy的用法與特性。
一、創建ndarray
NumPy最重要的數據結構是數組ndarray。創建一個ndarray的方法是使用np.array函數,傳遞給它一個Python列表或元組。下面的代碼演示了如何創建一個一維數組:
import numpy as np a = np.array([1, 2, 3, 4, 5]) print(a)
輸出:
[1 2 3 4 5]
可以使用np.asarray函數從Python列表或元組創建一個ndarray。np.zeros和np.ones函數可以創建全零或全一數組。np.eye函數可以創建單位矩陣。下面的代碼演示了如何創建一個二維數組:
b = np.array([[1, 2], [3, 4]]) print(b) c = np.asarray([(1, 2), (3, 4)]) print(c) d = np.zeros((3, 4)) print(d) e = np.ones((2, 3)) print(e) f = np.eye(5) print(f)
輸出:
[[1 2] [3 4]] [[1 2] [3 4]] [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] [[1. 1. 1.] [1. 1. 1.]] [[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 0. 1.]]
二、數組操作
NumPy可以對數組進行多種操作。數組加法、減法、乘法、除法等運算都是可以直接使用的。np.dot函數可以進行矩陣乘法。
a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = a + b print(c) d = a - b print(d) e = a * b print(e) f = a / b print(f) g = np.dot(a, b) print(g)
輸出:
[5 7 9] [-3 -3 -3] [ 4 10 18] [0.25 0.4 0.5 ] 32
可以使用ndarray的大量方法對數組進行操作。如ndarray.shape可以獲取數組的形狀,比如一個n行m列的數組,shape的返回值為(n, m)。ndarray.size可以獲取數組元素的總數。ndarray.reshape可以改變數組的形狀,使其變為另一個形狀。ndarray.transpose可以將數組轉置。下面的代碼演示了這些方法的用法:
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(a.shape) print(a.size) b = a.reshape(1, 9) print(b) c = a.transpose() print(c)
輸出:
(3, 3) 9 [[1 2 3 4 5 6 7 8 9]] [[1 4 7] [2 5 8] [3 6 9]]
三、索引與切片
NumPy的數組索引方式與Python中列表的方式相同。可以使用中括號[]對數組進行索引。對於一個n維數組,需要指定n個下標才能獲取到某一個元素。也可以對數組進行切片,獲取數組的部分元素。可以使用冒號:對數組進行切片。下面的代碼演示了數組的索引與切片:
a = np.array([1, 2, 3, 4, 5]) print(a[0]) print(a[-1]) print(a[1:4]) print(a[:3]) print(a[3:]) print(a[:-2]) print(a[::2]) b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(b[1][2]) print(b[1, 2]) print(b[0:2, 1:3])
輸出:
1 5 [2 3 4] [1 2 3] [4 5] [1 2 3] [1 3 5] 6 6 [[2 3] [5 6]]
四、廣播(Broadcasting)
NumPy中的廣播是一種強大的機制,它可以將不同形狀的數組進行計算。例如,將一個形狀為(3, 1)的數組與一個形狀為(1, 3)的數組相加會產生一個形狀為(3, 3)的數組。廣播的機制使得數組的運算非常方便和高效。下面的代碼演示了廣播的用法:
a = np.array([1, 2, 3]) b = 2 c = a + b print(c) d = np.array([[1, 2, 3], [4, 5, 6]]) e = np.array([1, 2, 3]) f = d + e print(f) g = np.array([[1], [2], [3]]) h = np.array([4, 5, 6]) i = g * h print(i)
輸出:
[3 4 5] [[2 4 6] [5 7 9]] [[ 4 5 6] [ 8 10 12] [12 15 18]]
五、NumPy的常用統計方法
NumPy中的ndarray類型提供了幾種不同的統計函數。最常用的函數包括計算數組中所有元素的求和、均值和標準差等。下面的代碼演示了一些常用的統計函數:
a = np.array([1, 2, 3, 4, 5]) print(np.sum(a)) print(np.mean(a)) print(np.std(a)) b = np.array([[1, 2], [3, 4]]) print(np.sum(b)) print(np.sum(b, axis=0)) print(np.sum(b, axis=1))
輸出:
15 3.0 1.4142135623730951 10 [4 6] [3 7]
六、隨機數生成
在數據分析和機器學習中,隨機數生成是非常重要的。NumPy提供了大量的隨機數生成函數。下面的代碼演示了一些常用的隨機數生成函數:
a = np.random.rand(3, 3) print(a) b = np.random.randn(3, 3) print(b) c = np.random.randint(1, 10, size=(3, 3)) print(c) d = np.random.choice([1, 2, 3, 4, 5], size=(3, 3)) print(d)
輸出:
[[0.52451401 0.73476582 0.72145149] [0.12381385 0.98456016 0.90398534] [0.25585383 0.42355746 0.0779397 ]] [[ 1.18620182 0.19244916 0.95212394] [ 0.31774084 -0.51186413 0.15535013] [-0.7440901 -0.19090821 -0.33039907]] [[1 6 3] [5 9 6] [9 1 9]] [[3 3 2] [5 4 5] [4 3 2]]
七、文件輸入輸出
NumPy提供了用於讀取和寫入磁盤數據的函數。ndarray可以保存到磁盤文件中,並從磁盤文件中加載。下面的代碼演示了文件輸入輸出的用法:
a = np.array([1, 2, 3, 4, 5]) np.save('a.npy', a) b = np.load('a.npy') print(b)
輸出:
[1 2 3 4 5]
八、小結
本文介紹了NumPy的基本用法,包括創建ndarray、數組操作、索引與切片、廣播、常用的統計方法、隨機數生成和文件輸入輸出。NumPy具有高效的數組處理能力,是進行科學計算和數據分析的重要工具。NumPy的完整代碼可以參考下面的代碼塊:
import numpy as np # 創建ndarray a = np.array([1, 2, 3, 4, 5]) print(a) b = np.array([[1, 2], [3, 4]]) print(b) c = np.asarray([(1, 2), (3, 4)]) print(c) d = np.zeros((3, 4)) print(d) e = np.ones((2, 3)) print(e) f = np.eye(5) print(f) # 數組操作 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = a + b print(c) d = a - b print(d) e = a * b print(e) f = a / b print(f) g = np.dot(a, b) print(g) a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(a.shape) print(a.size) b = a.reshape(1, 9) print(b) c = a.transpose() print(c) # 索引與切片 a = np.array([1, 2, 3, 4, 5]) print(a[0]) print(a[-1]) print(a[1:4]) print(a[:3]) print(a[3:]) print(a[:-2]) print(a[::2]) b = np.array([[1, 2, 3], [4, 5, 6]]) print(b[1][2]) print(b[1, 2]) print(b[0:2, 1:3]) # 廣播 a = np.array([1, 2, 3]) b = 2 c = a + b print(c) d = np.array([[1, 2, 3], [4, 5, 6]]) e = np.array([1, 2, 3]) f = d + e print(f) g = np.array([[1], [2], [3]]) h = np.array([4, 5, 6]) i = g * h print(i) # 常用統計方法 a = np.array([1, 2, 3, 4, 5]) print(np.sum(a)) print(np.mean(a)) print(np.std(a)) b = np.array([[1, 2, 3], [4, 5, 6]]) print(np.sum(b)) print(np.sum(b, axis=0)) print(np.sum(b, axis=1)) # 隨機數生成 a = np.random.rand(3, 3) print(a) b = np.random.randn(3, 3) print(b) c = np.random.randint(1, 10, size=(3, 3)) print(c) d = np.random.choice([1, 2, 3, 4, 5], size=(3, 3)) print(d) # 文件輸入輸出 a = np.array([1, 2, 3, 4, 5]) np.save('a.npy', a) b = np.load('a.npy') print(b)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/259304.html