一文詳細介紹numpy在python中的用法
前言
NumPy
是 Python 科學計算庫中非常重要的庫,主要用于處理大型多維數(shù)組和矩陣運算。它提供了大量數(shù)學函數(shù)來操作這些數(shù)組。 NumPy
的核心是 ndarray
對象,該對象是一個多維數(shù)組,可以存儲同類型的數(shù)據(jù)。
下面是 NumPy
的詳細用法和功能介紹:
1. 導入NumPy
在使用 NumPy
之前,需要先導入庫,通常我們會將 NumPy
以 np
作為別名:
import numpy as np
2. 創(chuàng)建數(shù)組
NumPy 中的數(shù)組稱為 ndarray
,可以通過多種方式創(chuàng)建數(shù)組:
a) 使用 array() 創(chuàng)建數(shù)組
# 從Python列表創(chuàng)建數(shù)組 arr = np.array([1, 2, 3, 4]) print(arr) # 輸出: [1 2 3 4] # 創(chuàng)建多維數(shù)組 arr_2d = np.array([[1, 2], [3, 4]]) print(arr_2d) # 輸出: [[1 2] [3 4]]
b) 使用 zeros()、ones() 和 full() 創(chuàng)建特定值數(shù)組
# 創(chuàng)建一個全為0的數(shù)組 zeros_arr = np.zeros((2, 3)) print(zeros_arr) # 輸出:[[0. 0. 0.] [0. 0. 0.]] # 創(chuàng)建一個全為1的數(shù)組 ones_arr = np.ones((2, 3)) print(ones_arr) # 輸出:[[1. 1. 1.] [1. 1. 1.]] # 創(chuàng)建一個指定數(shù)值的數(shù)組 full_arr = np.full((2, 2), 5) print(full_arr) # 輸出:[[5 5] [5 5]]
c) 使用 arange() 和 linspace() 創(chuàng)建序列數(shù)組
# 創(chuàng)建一個等差序列數(shù)組 arr_range = np.arange(0, 10, 2) print(arr_range) # 輸出:[0 2 4 6 8] # 創(chuàng)建一個線性間隔數(shù)組 arr_linspace = np.linspace(0, 1, 5) print(arr_linspace) # 輸出:[0. 0.25 0.5 0.75 1. ]
3. 數(shù)組屬性
ndarray
對象具有多種屬性,可以獲取數(shù)組的信息:
arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.shape) # 數(shù)組的形狀 (2, 3) print(arr.size) # 數(shù)組中的元素數(shù)量 6 print(arr.ndim) # 數(shù)組的維度 2 print(arr.dtype) # 數(shù)組元素的數(shù)據(jù)類型 int64
4. 數(shù)組索引和切片
NumPy
數(shù)組支持多維索引和切片操作。
a) 一維數(shù)組索引
arr = np.array([1, 2, 3, 4, 5]) print(arr[0]) # 輸出第一個元素:1 print(arr[-1]) # 輸出最后一個元素:5
b) 多維數(shù)組索引
arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) print(arr_2d[0, 2]) # 輸出第一行第三列的元素:3 print(arr_2d[1, -1]) # 輸出第二行最后一個元素:6
c) 切片
# 一維數(shù)組切片 arr = np.array([1, 2, 3, 4, 5]) print(arr[1:4]) # 輸出: [2 3 4] # 多維數(shù)組切片 arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr_2d[0:2, 1:3]) # 輸出:[[2 3] [5 6]]
5. 數(shù)學運算
NumPy
可以對數(shù)組進行廣播機制下的運算。
a) 數(shù)組的基本運算
arr = np.array([1, 2, 3]) print(arr + 2) # 輸出:[3 4 5] print(arr * 3) # 輸出:[3 6 9] print(arr ** 2) # 輸出:[1 4 9]
b) 數(shù)組之間的運算
arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) print(arr1 + arr2) # 輸出:[5 7 9] print(arr1 * arr2) # 輸出:[4 10 18]
c) 通用函數(shù) (Universal Functions)
NumPy
提供了許多通用的數(shù)學函數(shù),可以應用于數(shù)組的每個元素,例如 sin()
、exp()
、sqrt()
等。
arr = np.array([1, 2, 3]) print(np.sin(arr)) # 輸出:數(shù)組每個元素的正弦值 print(np.exp(arr)) # 輸出:數(shù)組每個元素的指數(shù)值 print(np.sqrt(arr)) # 輸出:數(shù)組每個元素的平方根
6. 數(shù)組的形狀操作
NumPy
提供了許多工具來改變數(shù)組的形狀。
a) reshape()
改變數(shù)組形狀
arr = np.array([[1, 2, 3], [4, 5, 6]]) reshaped_arr = arr.reshape((3, 2)) print(reshaped_arr) # 輸出: # [[1 2] # [3 4] # [5 6]]
b) 數(shù)組轉(zhuǎn)置
arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.T) # 輸出: # [[1 4] # [2 5] # [3 6]]
7. 數(shù)組的合并和分割
NumPy
支持對數(shù)組的合并和分割操作。
a) 數(shù)組的合并
arr1 = np.array([[1, 2], [3, 4]]) arr2 = np.array([[5, 6]]) # 垂直合并 vstack_arr = np.vstack((arr1, arr2)) print(vstack_arr) # 輸出:[[1 2] [3 4] [5 6]] # 水平合并 hstack_arr = np.hstack((arr1, arr2.T)) print(hstack_arr) # 輸出:[[1 2 5] [3 4 6]]
b) 數(shù)組的分割
arr = np.array([[1, 2, 3], [4, 5, 6]]) # 垂直分割 vsplit_arr = np.vsplit(arr, 2) print(vsplit_arr) # 輸出兩個2x3的數(shù)組 # 水平分割 hsplit_arr = np.hsplit(arr, 3) print(hsplit_arr) # 輸出三個2x1的數(shù)組
8. 布爾索引和條件過濾
NumPy 支持布爾條件篩選和索引操作。
arr = np.array([1, 2, 3, 4, 5]) print(arr[arr > 3]) # 輸出:[4 5] # 條件賦值 arr[arr > 3] = 0 print(arr) # 輸出:[1 2 3 0 0]
9. 常用的統(tǒng)計函數(shù)
NumPy
提供了豐富的統(tǒng)計函數(shù),方便對數(shù)組進行統(tǒng)計計算。
arr = np.array([1, 2, 3, 4, 5]) print(np.mean(arr)) # 平均值:3.0 print(np.sum(arr)) # 總和:15 print(np.std(arr)) # 標準差:1.414 print(np.min(arr)) # 最小值:1 print(np.max(arr)) # 最大值:5
10. 隨機數(shù)生成
NumPy
的 random
模塊提供了生成隨機數(shù)的功能。
# 生成一個[0, 1)之間的隨機浮點數(shù) print(np.random.rand()) # 生成一個服從標準正態(tài)分布的隨機數(shù) print(np.random.randn()) # 生成一個指定范圍內(nèi)的隨機整數(shù) print(np.random.randint(0, 10, (3, 3))) # 輸出一個3x3的隨機整數(shù)矩陣
11. 廣播機制
NumPy
具有廣播(broadcasting)機制,是指當操作的兩個數(shù)組形狀不同,但其中一個數(shù)組的形狀可以通過重復某些維度的元素來匹配另一個數(shù)組的形狀時,NumPy 會自動進行元素擴展,執(zhí)行操作。
# 一個 1x3 數(shù)組和一個 3x1 數(shù)組相加 a = np.array([1, 2, 3]) b = np.array([[1], [2], [3]]) # 廣播機制:將b廣播為 [1, 2, 3],然后執(zhí)行加法 result = a + b print(result) # 輸出: # [[2 3 4] # [3 4 5] # [4 5 6]]
12. 數(shù)組的矩陣運算
NumPy 中的矩陣運算功能包括矩陣乘法、矩陣轉(zhuǎn)置、求逆等常見的線性代數(shù)操作。特別適用于科學計算和機器學習中使用的線性代數(shù)方法。
a) 矩陣乘法
@ 符號或 np.dot() 函數(shù)可用于矩陣乘法。
# 定義兩個矩陣 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # 矩陣乘法 C = A @ B print(C) # 輸出: # [[19 22] # [43 50]] # 使用dot函數(shù) D = np.dot(A, B) print(D) # 輸出結(jié)果與上面相同
b) 矩陣轉(zhuǎn)置
# 矩陣轉(zhuǎn)置 A_T = A.T print(A_T) # 輸出: # [[1 3] # [2 4]]
d) 計算行列式
使用 np.linalg.det() 計算矩陣的行列式。
A = np.array([[1, 2], [3, 4]]) det_A = np.linalg.det(A) print(det_A) # 輸出:-2.0
e) 特征值和特征向量
使用 np.linalg.eig() 來計算矩陣的特征值和特征向量。
A = np.array([[1, 2], [3, 4]]) eigenvalues, eigenvectors = np.linalg.eig(A) print("特征值:", eigenvalues) print("特征向量:", eigenvectors) # 輸出: # 特征值: [-0.37228132 5.37228132] # 特征向量: # [[-0.82456484 -0.41597356] # [ 0.56576746 -0.90937671]]
12. 數(shù)組的排序和條件篩選
a) 排序
使用 np.sort() 函數(shù)對數(shù)組進行排序。該函數(shù)會返回一個排序后的數(shù)組,而不會修改原數(shù)組。
a = np.array([3, 1, 2, 4]) sorted_a = np.sort(a) print(sorted_a) # 輸出:[1 2 3 4]
b) 條件篩選
NumPy 提供了靈活的條件篩選操作,可以用布爾數(shù)組來選擇滿足條件的元素。
# 創(chuàng)建一個數(shù)組 a = np.array([1, 2, 3, 4, 5]) # 篩選出大于2的元素 filtered_a = a[a > 2] print(filtered_a) # 輸出:[3 4 5] # 使用where條件篩選 b = np.where(a > 2, a, -1) # 大于2的保持原值,否則設為-1 print(b) # 輸出:[-1 -1 3 4 5]
總結(jié)
到此這篇關(guān)于numpy在python中用法的文章就介紹到這了,更多相關(guān)python中numpy用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用ElementTree模塊處理XML的方法詳解
ElementTree是python的XML處理模塊,它提供了一個輕量級的對象模,下面這篇文章就來給大家介紹了關(guān)于Python利用ElementTree模塊處理XML的方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-08-08Python一行代碼識別增值稅發(fā)票實現(xiàn)示例
這篇文章主要為大家介紹了Python一行代碼識別增值稅發(fā)票實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03解決Python中導入自己寫的類,被劃紅線,但不影響執(zhí)行的問題
這篇文章主要介紹了解決Python中導入自己寫的類,被劃紅線,但不影響執(zhí)行的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07python數(shù)據(jù)類型強制轉(zhuǎn)換實例詳解
這篇文章主要介紹了python數(shù)據(jù)類型強制轉(zhuǎn)換實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06