Python中的numpy數(shù)組模塊
一、numpy簡(jiǎn)介
numpy是Python的一種開(kāi)源的數(shù)值計(jì)算擴(kuò)展庫(kù)。這種庫(kù)可用來(lái)存儲(chǔ)和處理大型numpy數(shù)組,比Python自身的嵌套列表結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來(lái)表示numpy數(shù)組)。
1、numpy庫(kù)作用:
- 區(qū)別于list列表,提供了數(shù)組操作、數(shù)組運(yùn)算、以及統(tǒng)計(jì)分布和簡(jiǎn)單的數(shù)學(xué)模型 。
- 計(jì)算速度快,甚至要由于python內(nèi)置的簡(jiǎn)單運(yùn)算,使得其成為pandas(分析結(jié)構(gòu)化數(shù)據(jù)的工具集)、sklearn(Scikit-learn(sklearn)是機(jī)器學(xué)習(xí)中常用的第三方模塊)等模塊的依賴包。
高級(jí)的框架如TensorFlow、PyTorch等,其數(shù)組操作也和numpy非常相似。
2、NumPy 是一個(gè)運(yùn)行速度非??斓臄?shù)學(xué)庫(kù),主要用于數(shù)組計(jì)算,包含:
- 一個(gè)強(qiáng)大的N維數(shù)組對(duì)象 ndarray
- 廣播功能函數(shù)
- 整合 C/C++/Fortran 代碼的工具
- 線性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能
3、NumPy 應(yīng)用
NumPy 通常與 SciPy(Scientific Python)和 Matplotlib(繪圖庫(kù))一起使用, 這種組合廣泛用于替代 MatLab,是一個(gè)強(qiáng)大的科學(xué)計(jì)算環(huán)境,有助于我們通過(guò) Python 學(xué)習(xí)數(shù)據(jù)科學(xué)或者機(jī)器學(xué)習(xí)。
- SciPy: 是一個(gè)開(kāi)源的 Python 算法庫(kù)和數(shù)學(xué)工具包。SciPy 包含的模塊有最優(yōu)化、線性代數(shù)、積分、插值、特殊函數(shù)、快速傅里葉變換、信號(hào)處理和圖像處理、常微分方程求解和其他科學(xué)與工程中常用的計(jì)算。
- Matplotlib: 是 Python 編程語(yǔ)言及其數(shù)值數(shù)學(xué)擴(kuò)展包 NumPy 的可視化操作界面。它為利用通用的圖形用戶界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向應(yīng)用程序嵌入式繪圖提供了應(yīng)用程序接口(API)。
二、為什么用numpy
lis1 = [1, 2, 3] lis2 = [4, 5, 6]
如果我們想讓lis1 * lis2得到一個(gè)結(jié)果為lis_res = [4, 10, 18],非常復(fù)雜。
三、創(chuàng)建numpy數(shù)組
numpy數(shù)組即numpy的ndarray對(duì)象,
1、將列表轉(zhuǎn)換創(chuàng)建numpy數(shù)組,可選擇顯式指定dtype
import numpy as np arr = np.array([1, 2, 3]) # 創(chuàng)建一維的ndarray對(duì)象 print(arr, type(arr)) # [1 2 3] <class 'numpy.ndarray'> arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32) print(arr) print(np.array([[1, 2, 3], [4, 5, 6]])) # 創(chuàng)建二維的ndarray對(duì)象 # [[1 2 3] # [4 5 6]] print(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])) # 創(chuàng)建三維的ndarray對(duì)象 # [[1 2 3] # [4 5 6] # [7 8 9]]
2、arange方式創(chuàng)建numpy數(shù)組
# 構(gòu)造0-9的ndarray數(shù)組 print(np.arange(10)) # [0 1 2 3 4 5 6 7 8 9] # 構(gòu)造1-4的ndarray數(shù)組 print(np.arange(1, 5)) # [1 2 3 4] # 構(gòu)造1-19且步長(zhǎng)為2的ndarray數(shù)組 print(np.arange(1, 20, 2)) # [ 1 3 5 7 9 11 13 15 17 19]
3、其他方式創(chuàng)建numpy數(shù)組
# 構(gòu)造3*4的全0的numpy數(shù)組 print(np.zeros((3, 4))) #zeros():根據(jù)指定形狀和dtype創(chuàng)建全0數(shù)組 # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]] # 構(gòu)造3*4的全1的numpy數(shù)組 print(np.ones((3, 4))) #ones():根據(jù)指定形狀和dtype創(chuàng)建全1數(shù)組 [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] # 構(gòu)造一個(gè)4*4的隨機(jī)的numpy數(shù)組,里面的元素是隨機(jī)生成的 print(np.empty((4, 4))) #empty():創(chuàng)建一個(gè)元素全隨機(jī)的數(shù)組 # [[ 2.31584178e+077 -1.49457545e-154 3.95252517e-323 0.00000000e+000] # [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] # [ 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000] # [ 0.00000000e+000 0.00000000e+000 1.29074055e-231 1.11687366e-308]] arr = np.ones([2, 2], dtype=int) print(arr.reshape(4, 1)) #reshape():重塑形狀 # [[1] # [1] # [1] # [1]] # 構(gòu)造一個(gè)等差數(shù)列,取頭也取尾,從0取到20,取5個(gè)數(shù) print(np.linspace(0, 20, 5)) # linspace/logspace():類(lèi)似arange(),第三個(gè)參數(shù)為數(shù)組長(zhǎng)度 # [ 0. 5. 10. 15. 20.] # 構(gòu)造一個(gè)等比數(shù)列,從10**0取到10**20,取5個(gè)數(shù) print(np.logspace(0, 20, 5)) # [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20] # 構(gòu)造3個(gè)主元的單位numpy數(shù)組 print(np.eye(3)) #eye():創(chuàng)建單位矩陣 # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]
4、numpy或pandas中reshape()重塑形狀(行列轉(zhuǎn)換)的用法
例子:
z = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) z.shape #(4, 4)四行撕裂
1.z.reshape(-1)或z.reshape(1,-1),轉(zhuǎn)換成1行,列數(shù)未知。即將數(shù)組橫向平鋪。
z.reshape(-1) #array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
2.z.reshape(-1, 1)),轉(zhuǎn)換成1列,行數(shù)未知。即將數(shù)組縱向平鋪。
z.reshape(-1,1) # array([[ 1], [ 2], [ 3], [ 4], [ 5], [ 6], [ 7], [ 8], [ 9], [10], [11], [12], [13], [14], [15], [16]])
3.z.reshape(-1, 2),newshape列數(shù)等于2,行數(shù)未知,reshape后的shape等于(8, 2)
z.reshape(-1, 2) # array([[ 1, 2], [ 3, 4], [ 5, 6], [ 7, 8], [ 9, 10], [11, 12], [13, 14], [15, 16]])
4、numpy.random生成隨機(jī)數(shù)
舉例:
rs = np.random.RandomState(1) # RandomState()方法會(huì)讓數(shù)據(jù)值隨機(jī)一次,之后都是相同的數(shù)據(jù) print(rs.rand(10)) # [4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01 # 1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01 # 3.96767474e-01 5.38816734e-01] np.random.seed(1) # seed()方法會(huì)讓數(shù)據(jù)值隨機(jī)一次,之后都是相同的數(shù)據(jù) print(np.random.rand(3, 4)) # rand產(chǎn)生均勻分布的隨機(jī)數(shù)。dn為第n維數(shù)據(jù)的維度。這里構(gòu)造3*4的均勻分布的numpy數(shù)組 # [[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01] # [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01] # [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]] print(np.random.rand(3, 4, 5)) # 構(gòu)造3*4*5的均勻分布的numpy數(shù)組 # [[[0.20445225 0.87811744 0.02738759 0.67046751 0.4173048 ] # [0.55868983 0.14038694 0.19810149 0.80074457 0.96826158] # [0.31342418 0.69232262 0.87638915 0.89460666 0.08504421] # [0.03905478 0.16983042 0.8781425 0.09834683 0.42110763]] # # [[0.95788953 0.53316528 0.69187711 0.31551563 0.68650093] # [0.83462567 0.01828828 0.75014431 0.98886109 0.74816565] # [0.28044399 0.78927933 0.10322601 0.44789353 0.9085955 ] # [0.29361415 0.28777534 0.13002857 0.01936696 0.67883553]] # # [[0.21162812 0.26554666 0.49157316 0.05336255 0.57411761] # [0.14672857 0.58930554 0.69975836 0.10233443 0.41405599] # [0.69440016 0.41417927 0.04995346 0.53589641 0.66379465] # [0.51488911 0.94459476 0.58655504 0.90340192 0.1374747 ]]] # 構(gòu)造3*4的正態(tài)分布的numpy數(shù)組 print(np.random.randn(3, 4)) #randn產(chǎn)生標(biāo)準(zhǔn)正態(tài)分布隨機(jī)數(shù)。dn為第n維數(shù)據(jù)的維度 # [[ 0.30017032 -0.35224985 -1.1425182 -0.34934272] # [-0.20889423 0.58662319 0.83898341 0.93110208] # [ 0.28558733 0.88514116 -0.75439794 1.25286816]] # 構(gòu)造取值為1-5內(nèi)的10個(gè)元素的ndarray數(shù)組 print(np.random.randint(1, 5, 10)) # randint(low[, high, size, dtype]):產(chǎn)生隨機(jī)整數(shù)。low:最小值;high:最大值;size:數(shù)據(jù)個(gè)數(shù) # [1 1 1 2 3 1 2 1 3 4] # 構(gòu)造取值為0-1內(nèi)的3*4的numpy數(shù)組 print(np.random.random_sample((3, 4))) # random_sample([size]):在[0,1)[0,1)內(nèi)產(chǎn)生隨機(jī)數(shù)。size為隨機(jī)數(shù)的shape,可以為元祖或者列表 # [[0.62169572 0.11474597 0.94948926 0.44991213] # [0.57838961 0.4081368 0.23702698 0.90337952] # [0.57367949 0.00287033 0.61714491 0.3266449 ]] arr = np.array([1, 2, 3]) # 隨機(jī)選取arr中的兩個(gè)元素 print(np.random.choice(arr, size=2)) # choice(a[, size]):從arr中隨機(jī)選擇指定數(shù)據(jù)。arr為1維數(shù)組;size為數(shù)組形狀 # [1 3] arr = np.random.uniform(1, 5, (2, 3)) #uniform(low,high [,size]):給定形狀產(chǎn)生隨機(jī)數(shù)組。low為最小值;high為最大值,size為數(shù)組形狀 print(arr) # [[4.72405173 3.30633687 4.35858086] # [3.49316845 2.29806999 3.91204657]] np.random.shuffle(arr) # shuffle(a):與random.shuffle相同。a為指定數(shù)組 print(arr) # [[3.49316845 2.29806999 3.91204657] # [4.72405173 3.30633687 4.35858086]]
5、 fromstring/fromfunction(了解)
fromstring:通過(guò)對(duì)字符串的字符編碼所對(duì)應(yīng)ASCII編碼的位置,生成一個(gè)ndarray對(duì)象
s = 'abcdef' # np.int8表示一個(gè)字符的字節(jié)數(shù)為8 print(np.fromstring(s, dtype=np.int8)) # [ 97 98 99 100 101 102]
fromfunction:使用函數(shù)對(duì)numpy數(shù)組元素的行和列的索引做處理,得到當(dāng)前元素的值。
索引從0開(kāi)始,并構(gòu)造一個(gè)3*4的numpy數(shù)組 print(np.fromfunction(func, (3, 4)))
def func(i, j): """其中i為numpy數(shù)組的行,j為numpy數(shù)組的列""" return i * j # 使用函數(shù)對(duì)numpy數(shù)組元素的行和列的索引做處理,得到當(dāng)前元素的值,索引從0開(kāi)始,并構(gòu)造一個(gè)3*4的numpy數(shù)組 print(np.fromfunction(func, (3, 4))) # [[0. 0. 0. 0.] # [0. 1. 2. 3.] # [0. 2. 4. 6.]]
四、常用屬性
舉例:
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print(arr[:, :]) # 取所有元素 # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print(arr[:1, :]) # [[1 2 3 4]] # 取第一行的所有元素 print(arr[0, [0, 1, 2, 3]]) # [1 2 3 4] # 取第一行的所有元素 print(arr[:, :1]) # 取第一列的所有元素 # [[1] # [5] # [9]] print(arr[(0, 1, 2), 0]) # [1 5 9] # 取第一列的所有元素 print(arr[0, 0]) # 1 # 取第一行第一列的元素 print(arr[arr > 5]) # [ 6 7 8 9 10 11 12] # 取大于5的元素,返回一個(gè)數(shù)組 print(arr > 5) # numpy數(shù)組按運(yùn)算符取元素的原理,即通過(guò)arr > 5生成一個(gè)布爾numpy數(shù)組 # [[False False False False] # [False True True True] # [ True True True True]]
五、切割
切分numpy數(shù)組類(lèi)似于列表的切割,但是與列表的切割不同的是,numpy數(shù)組的切割涉及到行和列的切割,但是兩者切割的方式都是從索引0開(kāi)始,并且取頭不取尾。
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print(arr[:, :]) # 取所有元素 # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print(arr[:1, :]) # [[1 2 3 4]] # 取第一行的所有元素 print(arr[0, [0, 1, 2, 3]]) # [1 2 3 4] # 取第一行的所有元素 print(arr[:, :1]) # 取第一列的所有元素 # [[1] # [5] # [9]] print(arr[(0, 1, 2), 0]) # [1 5 9] # 取第一列的所有元素 print(arr[0, 0]) # 1 # 取第一行第一列的元素 print(arr[arr > 5]) # [ 6 7 8 9 10 11 12] # 取大于5的元素,返回一個(gè)數(shù)組 print(arr > 5) # numpy數(shù)組按運(yùn)算符取元素的原理,即通過(guò)arr > 5生成一個(gè)布爾numpy數(shù)組 # [[False False False False] # [False True True True] # [ True True True True]]
七、元素替換
numpy數(shù)組元素的替換,類(lèi)似于列表元素的替換,并且numpy數(shù)組也是一個(gè)可變類(lèi)型的數(shù)據(jù),即如果對(duì)numpy數(shù)組進(jìn)行替換操作,會(huì)修改原numpy數(shù)組的元素,所以下面我們用.copy()方法舉例numpy數(shù)組元素的替換。
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] arr1 = arr.copy() arr1[:1, :] = 0 # 取第一行的所有元素,并且讓第一行的元素都為0 print(arr1) # [[ 0 0 0 0] # [ 5 6 7 8] # [ 9 10 11 12]] arr2 = arr.copy() arr2[arr > 5] = 0 # 取所有大于5的元素,并且讓大于5的元素為0 print(arr2) # [[1 2 3 4] # [5 0 0 0] # [0 0 0 0]] arr3 = arr.copy() arr3[:, :] = 0 # 對(duì)numpy數(shù)組清零 print(arr3) # [[0 0 0 0] # [0 0 0 0] # [0 0 0 0]]
八、合并
arr1 = np.array([[1, 2], [3, 4], [5, 6]]) print(arr1) # [[1 2] # [3 4] # [5 6]] arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(arr2) # [[ 7 8] # [ 9 10] # [11 12]] print(np.concatenate((arr1, arr2), axis=0)) # 合并兩個(gè)numpy數(shù)組,其中axis=0表示合并兩個(gè)numpy數(shù)組的行 # [[ 1 2] # [ 3 4] # [ 5 6] # [ 7 8] # [ 9 10] # [11 12]] print(np.concatenate((arr1, arr2), axis=1)) # 合并兩個(gè)numpy數(shù)組,其中axis=1表示合并兩個(gè)numpy數(shù)組的列 # [[ 1 2 7 8] # [ 3 4 9 10] # [ 5 6 11 12]] print(np.vstack((arr1, arr2))) # 合并兩個(gè)numpy數(shù)組的行,其中vstack的v表示vertical垂直的,垂直方向的合并 # [[ 1 2] # [ 3 4] # [ 5 6] # [ 7 8] # [ 9 10] # [11 12]] print(np.hstack((arr1, arr2))) # 合并兩個(gè)numpy數(shù)組的列,其中hstack的h表示horizontal水平的,水平方向的合并 # [[ 1 2 7 8] # [ 3 4 9 10] # [ 5 6 11 12]]
九、運(yùn)算符
arr1 = np.array([[1, 2], [3, 4], [5, 6]]) print(arr1) # [[1 2] # [3 4] # [5 6]] arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(arr2) # [[ 7 8] # [ 9 10] # [11 12]] print(arr1 + arr2) # +:兩個(gè)numpy數(shù)組對(duì)應(yīng)元素相加 ;-減;*乘;/相除取整;%相除取余 # [[ 8 10] # [12 14] # [16 18]] print(arr1**2) # **n:?jiǎn)蝹€(gè)numpy數(shù)組每個(gè)元素都取n次方,如**2:每個(gè)元素都取平方 # [[ 1 4] # [ 9 16] # [25 36]]
十、運(yùn)算函數(shù)
- 一元函數(shù):abs, sqrt, exp, log, ceil, floor, rint, trunc, modf, isnan, isinf, cos, sin, tan
- 二元函數(shù):add, substract, multiply, divide, power, mod, maximum, mininum
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(arr) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print(np.sin(arr)) # 對(duì)numpy數(shù)組的所有元素取正弦,cos余弦,tan正切 # [[0.84147098 0.90929743 0.14112001 - 0.7568025] # [-0.95892427 - 0.2794155 0.6569866 0.98935825] # [0.41211849 - 0.54402111 - 0.99999021 - 0.53657292]] print(np.sqrt(arr)) # 對(duì)numpy數(shù)組的所有元素開(kāi)根號(hào),.exp指數(shù)函數(shù) # [[1. 1.41421356 1.73205081 2. ] # [2.23606798 2.44948974 2.64575131 2.82842712] # [3. 3.16227766 3.31662479 3.46410162]] print(np.arcsin(arr * 0.1)) # 對(duì)numpy數(shù)組的所有元素取反正弦,如果元素不在定義域內(nèi),則會(huì)取nan值 # [[0.10016742 0.20135792 0.30469265 0.41151685] # [0.52359878 0.64350111 0.7753975 0.92729522] # [1.11976951 1.57079633 nan nan]] # RuntimeWarning: invalid # value # encountered in arcsin # 判斷矩陣元素中是否含有np.nan值 print(np.isnan(arr)) # [[False False False False] # [False False False False] # [False False False False]]
十一、矩陣化
arr1 = np.array([[1, 2, 3], [4, 5, 6]]) print(arr1.shape) # (2, 3) arr2 = np.array([[7, 8], [9, 10], [11, 12]]) print(arr2.shape) # (3, 2) assert arr1.shape[0] == arr2.shape[1] # 1、numpy數(shù)組的點(diǎn)乘必須滿足第一個(gè)numpy數(shù)組的列數(shù)等于第二個(gè)numpy數(shù)組的行數(shù),即m?n?n?m=m?mm?n·n?m=m?m。 # 2*3·3*2 = 2*2 print(arr2.shape) # (3, 2) arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr) # [[1 2 3] # [4 5 6]] print(arr.transpose()) # 2、numpy數(shù)組的轉(zhuǎn)置,相當(dāng)于numpy數(shù)組的行和列互換。 # [[1 4] # [2 5] # [3 6]] print(arr.T) # [[1 4] # [2 5] # [3 6]] arr = np.array([[1, 2, 3], [4, 5, 6], [9, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [9 8 9]] print(np.linalg.inv(arr)) # 3、numpy數(shù)組的逆,numpy數(shù)組行和列相同時(shí),numpy數(shù)組才可逆。 # [[ 0.5 -1. 0.5 ] # [-3. 3. -1. ] # [ 2.16666667 -1.66666667 0.5 ]] arr = np.eye(3) # 單位numpy數(shù)組的逆是單位numpy數(shù)組本身 print(arr) # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]] print(np.linalg.inv(arr)) # [[1. 0. 0.] # [0. 1. 0.] # [0. 0. 1.]]
十二、numpy數(shù)組的數(shù)學(xué)和統(tǒng)計(jì)方法
1、最大最小值、平均、求和
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr.max()) # 9 # 獲取numpy數(shù)組所有元素中的最大值 print(arr.min()) # 1 # 獲取numpy數(shù)組所有元素中的最小值 print(arr.max(axis=0)) # [7 8 9] # 獲取numpy數(shù)組每一行的最大值 print(arr.max(axis=1)) # [3 6 9] # 獲取numpy數(shù)組每一列的最大值 print(arr.argmax(axis=1)) # [2 2 2] # 獲取numpy數(shù)組最大元素的索引位置 argmin:求最小值索引 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr.sum()) # 45 # 對(duì)numpy數(shù)組的每一個(gè)元素求和 print(arr.sum(axis=0)) # [12 15 18] # 對(duì)numpy數(shù)組的每一列求和 print(arr.sum(axis=1)) # [ 6 15 24] # 對(duì)numpy數(shù)組的每一行求和 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr.mean()) # 5.0 # 獲取numpy數(shù)組所有元素的平均值 print(arr.mean(axis=0)) # [4. 5. 6.] # 獲取numpy數(shù)組每一列的平均值 print(arr.mean(axis=1)) # [2. 5. 8.] # 獲取numpy數(shù)組每一行的平均值
2、累加和
arr = np.array([1, 2, 3, 4, 5]) print(arr) # [1 2 3 4 5] print(arr.cumsum()) # [ 1 3 6 10 15] # 第n個(gè)元素為前n-1個(gè)元素累加和
3、排序
numpy.sort(a, axis, kind, order):返回輸入數(shù)組的排序副本
- a: 要排序的數(shù)組
- axis: 沿著它排序數(shù)組的軸,如果沒(méi)有數(shù)組會(huì)被展開(kāi),沿著最后的軸排序, axis=0 按列排序,axis=1 按行排序
- kind: 默認(rèn)為'quicksort'(快速排序) ,
'mergesort'
(歸并排序),'heapsort'
(堆排序) - order: 如果數(shù)組包含字段,則是要排序的字段
a = np.array([[3,7],[9,1]]) print (a) #[[3 7] # [9 1]] print (np.sort(a)) #[[3 7] # [1 9]] print (np.sort(a, axis = 0)) #按列排序: #[[3 1] # [9 7]] dt = np.dtype([('name', 'S10'),('age', int)]) a = np.array([("raju",21),("anil",25),("ravi", 17), ("amar",27)], dtype = dt) print (a) # [(b'raju', 21) (b'anil', 25) (b'ravi', 17) (b'amar', 27)] print (np.sort(a, order = 'name')) 在 sort 函數(shù)中排序字段;按 name 排序: # [(b'amar', 27) (b'anil', 25) (b'raju', 21) (b'ravi', 17)]
4、 方差
方差公式為
其中x為numpy數(shù)組。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr.var()) # 6.666666666666667 # 獲取numpy數(shù)組所有元素的方差 print(arr.var(axis=0)) # [6. 6. 6.] # 獲取numpy數(shù)組每一列的元素的方差 print(arr.var(axis=1)) # [0.66666667 0.66666667 0.66666667] # 獲取numpy數(shù)組每一行的元素的方差
5、 標(biāo)準(zhǔn)差
標(biāo)準(zhǔn)差公式為:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(arr.std()) # 2.581988897471611 # 獲取numpy數(shù)組所有元素的標(biāo)準(zhǔn)差 print(arr.std(axis=0)) # [2.44948974 2.44948974 2.44948974] # 獲取numpy數(shù)組每一列的標(biāo)準(zhǔn)差 print(arr.std(axis=1)) # [0.81649658 0.81649658 0.81649658] # 獲取numpy數(shù)組每一行的標(biāo)準(zhǔn)差
6、 中位數(shù)
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr) # [[1 2 3] # [4 5 6] # [7 8 9]] print(np.median(arr)) # 5.0 # 獲取numpy數(shù)組所有元素的中位數(shù) print(np.median(arr, axis=0)) # [4. 5. 6.] # 獲取numpy數(shù)組每一列的中位數(shù) print(np.median(arr, axis=1)) # [2. 5. 8.] # 獲取numpy數(shù)組每一行的中位數(shù)
到此這篇關(guān)于Python數(shù)組模塊numpy的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
自定義Django默認(rèn)的sitemap站點(diǎn)地圖樣式
這篇文章主要介紹了自定義Django默認(rèn)的sitemap站點(diǎn)地圖樣式,通過(guò)代碼給大家介紹了使用Django的sitemap功能,代碼很簡(jiǎn)單非常不錯(cuò)對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03關(guān)于networkx返回圖的鄰接矩陣問(wèn)題
這篇文章主要介紹了關(guān)于networkx返回圖的鄰接矩陣問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12淺析Python 抽象工廠模式的優(yōu)缺點(diǎn)
這篇文章主要介紹了Python 抽象工廠模式的優(yōu)缺點(diǎn),文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07python 利用matplotlib在3D空間繪制二次拋物面的案例
這篇文章主要介紹了python 利用matplotlib在3D空間繪制二次拋物面的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Python?PaddleNLP開(kāi)源實(shí)現(xiàn)快遞單信息抽取
這篇文章主要為大家介紹了Python?PaddleNLP開(kāi)源項(xiàng)目實(shí)現(xiàn)對(duì)快遞單信息抽取,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06pandas dataframe拼接后index重新排序方式
這篇文章主要介紹了pandas dataframe拼接后index重新排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10