Python 第三方模块之 NumPy - 科学计算
NumPy 簡(jiǎn)介
NumPy?發(fā)展歷史
NumPy模塊
numPy:Numerical Python,即數(shù)值Python包,是Python進(jìn)行科學(xué)計(jì)算的一個(gè)基礎(chǔ)包,所以是一個(gè)掌握其他Scipy庫(kù)中模塊的基礎(chǔ)模塊,一定需要先掌握該包的主要使用方式。
- 官網(wǎng):http://www.numpy.org/
- 官方文檔:https://docs.scipy.org/doc/numpy/user/index.html
NumPy?、Scipy、Pandas、matplotlib簡(jiǎn)介
NumPy?——基礎(chǔ),以矩陣為基礎(chǔ)的數(shù)學(xué)計(jì)算模塊,純數(shù)學(xué)存儲(chǔ)和處理大型矩陣。??這個(gè)是很基礎(chǔ)的擴(kuò)展,其余的擴(kuò)展都是以此為基礎(chǔ)。
NumPy核心數(shù)據(jù)結(jié)構(gòu):ndarray
NumPy的數(shù)組類被稱作ndarray。通常被稱作數(shù)組。注意numpy.array和標(biāo)準(zhǔn)Python庫(kù)類array.array并不相同,后者只處理一維數(shù)組和提供少量功能。
一種由相同類型的元素組成的多維數(shù)組,元素?cái)?shù)量是實(shí)現(xiàn)給定好的
元素的數(shù)據(jù)類型由dtype(data-type)對(duì)象來指定,每個(gè)ndarray只有一種dtype類型
ndarray的大小固定,創(chuàng)建好數(shù)組后數(shù)組大小是不會(huì)再發(fā)生改變的
ndarray創(chuàng)建
函數(shù)創(chuàng)建
array:接收一個(gè)普通的python序列,并將其轉(zhuǎn)換為ndarray
print(np.array([1,2,3])) # 用列表創(chuàng)建一維數(shù)組 print(np.array((1,2,3))) # 用元組創(chuàng)建一維數(shù)組 print(np.array([[1,2,3],[3,4,5]])) # 創(chuàng)建二維數(shù)組 print(np.array([[[1,2,3],[3,4,5]], [[4,5,6],[7,8,9]]])) # 創(chuàng)建三維數(shù)組# [1 2 3]# [1 2 3] # [[1 2 3] # [3 4 5]] # [[[1 2 3] # [3 4 5]] # [[4 5 6] # [7 8 9]]]zeros函數(shù):創(chuàng)建指定長(zhǎng)度或者形狀的全零數(shù)組
print(np.zeros((3,4)))# [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]]ones函數(shù):創(chuàng)建指定長(zhǎng)度或者形狀的全1數(shù)組。
print(np.ones((3,4)))# [[1. 1. 1. 1.] # [1. 1. 1. 1.] # [1. 1. 1. 1.]]empty函數(shù):創(chuàng)建一個(gè)沒有任何具體值的數(shù)組(準(zhǔn)備地說是創(chuàng)建一些未初始化的ndarray多維數(shù)組)
print(np.empty((3,4)))# [[6.23042070e-307 3.56043053e-307 1.37961641e-306 6.23039354e-307] # [6.23053954e-307 9.34609790e-307 8.45593934e-307 9.34600963e-307] # [1.86921143e-306 6.23061763e-307 9.34608432e-307 4.24399158e-314]]其他方式:
arange函數(shù): 類似python的range函數(shù),通過指定開始值、終值和步長(zhǎng)來創(chuàng)建一個(gè)一維數(shù)組,注意:最終創(chuàng)建的數(shù)組不包含終值
print(np.arange(9)) # 一個(gè)參數(shù)時(shí)代表是n值 print(np.arange(0,9,3)) # 起始值,終值,步長(zhǎng)linspace函數(shù):通過指定開始值、終值和元素個(gè)數(shù)來創(chuàng)建一個(gè)一維數(shù)組,數(shù)組的數(shù)據(jù)元素符合等差數(shù)列,可以通過endpoint關(guān)鍵字指定是否包含終值,默認(rèn)包含終值
print(np.linspace(0,8,5)) # 形成一個(gè)0到8之間的等差數(shù)列,共5個(gè)元素 # [0. 2. 4. 6. 8.]logspace函數(shù):和linspace函數(shù)類似,不過創(chuàng)建的是等比數(shù)列數(shù)組
print(np.logspace(0, 2, 5)) # 范圍1-10**2,5個(gè)元素 print(np.logspace(0, 5, 6, base=2)) # 范圍 1-2**5,6個(gè)元素,base是底# [ 1. 3.16227766 10. 31.6227766 100. ] # [ 1. 2. 4. 8. 16. 32.]np.random.randint((m,n,size=(a,b))):創(chuàng)建隨機(jī)整數(shù)數(shù)組,選值的范圍是[m,n); a是數(shù)組的行;b是數(shù)組的列數(shù)
print(np.random.randint(1,9, size=(3,4)))# [[1 2 3 5] # [1 6 2 7] # [8 6 4 6]]np.random.random((m,n,p)):創(chuàng)建隨機(jī)數(shù)組,范圍0-1之間,m為維數(shù),默認(rèn)為1; n為行數(shù),默認(rèn)為1; p為列數(shù),默認(rèn)為1
print(np.random.random()) print(np.random.random((3,3))) print(np.random.random((3,4,5)))0.488869811358302[[0.04233258 0.3131225 0.68944938][0.87059721 0.67384851 0.15279566][0.55984723 0.93180875 0.94961102]][[[0.59919237 0.1994035 0.51349683 0.74415431 0.08967972][0.51202792 0.90590204 0.72763875 0.28438195 0.74681998][0.83841345 0.58347337 0.11484284 0.55444849 0.7978348 ][0.28018216 0.01040884 0.57392768 0.2434304 0.59227622]][[0.5430919 0.42146133 0.14726534 0.03191174 0.26208523][0.09970413 0.42386556 0.91181302 0.98131496 0.80365805][0.45376739 0.83388326 0.44127547 0.09819375 0.7977529 ][0.94739682 0.70020476 0.21155345 0.42489893 0.99906962]][[0.91776003 0.10385849 0.52768841 0.79937635 0.69065729][0.00796977 0.77475184 0.37661829 0.86323215 0.48432327][0.26268683 0.51724413 0.24022605 0.08388501 0.30099232][0.09245234 0.07751062 0.77418801 0.43640313 0.99036787]]]?np.random.randn(m,n):創(chuàng)建一個(gè)標(biāo)準(zhǔn)正態(tài)分布的數(shù)組,m表示行數(shù);n表示列數(shù)。
print(np.random.randn(3,2)) # [[ 0.10110133 -0.23799349] # [ 0.44611654 2.52476781] # [-0.52620207 -1.42422191]]ndarray對(duì)象屬性
- ndim 數(shù)組軸(維度)的個(gè)數(shù),軸的個(gè)數(shù)被稱作秩
- shape 數(shù)組的維度, 例如一個(gè)2排3列的矩陣,它的shape屬性將是(2,3),這個(gè)元組的長(zhǎng)度顯然是秩,即維度或者ndim屬性
- size 數(shù)組元素的總個(gè)數(shù),等于shape屬性中元組元素的乘積。
- dtype 一個(gè)用來描述數(shù)組中元素類型的對(duì)象,可以通過創(chuàng)造或指定dtype使用標(biāo)準(zhǔn)Python類型。不過NumPy提供它自己的數(shù)據(jù)類型。
- itemsize 數(shù)組中每個(gè)元素的字節(jié)大小。例如,一個(gè)元素類型為float64的數(shù)組itemsiz屬性值為8(=64/8),又如,一個(gè)元素類型為complex32的數(shù)組item屬性為4(=32/8).
NumPy基本數(shù)據(jù)類型
| 數(shù)據(jù)類型 | 類型簡(jiǎn) 寫 | 說明 |
| int_ | ? | 默認(rèn)整形 |
| intc | ? | 等價(jià)于long的整形 |
| int8 | i1 | 字節(jié)整形,1個(gè)字節(jié),范圍:[-128,127] |
| int16 | i2 | 整形,2個(gè)字節(jié),范圍:[-32768,32767] |
| int32 | i3 | 整形,4個(gè)字節(jié),范圍:[-2^31, 2^31-1] |
| int64 | i4 | 整形,8個(gè)字節(jié),范圍:[-2^63, 2^63-1] |
| uint8 | u1 | 無(wú)符號(hào)整形, 1個(gè)字節(jié), 范圍:[0,255] |
| uint16 | u2 | 無(wú)符號(hào)整形, 2個(gè)字節(jié), 范圍:[0,65535] |
| uint32 | u3 | 無(wú)符號(hào)整形, 1個(gè)字節(jié), 范圍:[0, 2^32-1] |
| uint64 | u4 | 無(wú)符號(hào)整形, 1個(gè)字節(jié), 范圍:[0,2^64-1] |
| bool_ | ? | 以一個(gè)字節(jié)形成存儲(chǔ)的布爾值(True或者False) |
| float_ | ? | float64簡(jiǎn)寫形式 |
| float16 | f2 | 半精度浮點(diǎn)型(2字節(jié)):1符號(hào)位+5位指數(shù)+10位的小數(shù)部分 |
| float32 | f4或者f | 單精度浮點(diǎn)型(4字節(jié)):1符號(hào)位+8位指數(shù)+23位的小數(shù)部分 |
| float64 | f8或者d | 雙精度浮點(diǎn)型(8字節(jié)):1符號(hào)位+11位指數(shù)+52位的小數(shù)部分 |
| complex_ | c16 | complex128的簡(jiǎn)寫形式 |
| complex64 | c8 | 復(fù)數(shù),由兩個(gè)32位的浮點(diǎn)數(shù)來表示 |
| complex128 | c16 | 復(fù)數(shù),由兩個(gè)64位的浮點(diǎn)數(shù)來表示 |
| object | O | Python對(duì)象類型 |
| String_ | S | 固定長(zhǎng)度的字符串類型(每個(gè)字符1個(gè)字節(jié)),比如:要?jiǎng)?chuàng)建一個(gè)長(zhǎng)度為8的字符串,應(yīng)該使用S8 |
| Unicode_ | U | 固定長(zhǎng)度的unicode類型的字符串(每個(gè)字符占用字節(jié)數(shù)由平臺(tái)決定),長(zhǎng)度定義類似String_類型 |
ndarray修改類型
創(chuàng)建numpy數(shù)組的時(shí)候可以通過屬性dtype顯示指定數(shù)據(jù)類型,如果不指定的情況下,numpy會(huì)自動(dòng)推斷出適合的數(shù)據(jù)類型,所以一般不需要顯示給定數(shù)據(jù)類型。
?如果需要更改一個(gè)已經(jīng)存在的數(shù)組的數(shù)據(jù)類型,可以通過astype方法進(jìn)行修改從而得到一個(gè)新數(shù)組
arr = np.random.randint(1, 9, size=(3,3)) print(arr.dtype) # int32 arr2 = arr.astype(float) print(arr2.dtype) # float64數(shù)值型dtype的命名方式為:一個(gè)類型名稱(eg:int、float等),后接一個(gè)表示各個(gè)元素位長(zhǎng)的數(shù)字。比如Python的float數(shù)據(jù)類型(雙精度浮點(diǎn)值),需要占用8個(gè)字節(jié)(64位),因此在NumPy中記為float64。每個(gè)數(shù)據(jù)類型都有一個(gè)類型代碼,即簡(jiǎn)寫方式
arr3 = np.random.randint(1, 9, size=(3,3), dtype='i8') print(arr3.dtype) # int64ndarray修改形狀
對(duì)于一個(gè)已經(jīng)存在的ndarray數(shù)組對(duì)象而言,可以通過修改形狀相關(guān)的參數(shù)/方法從而改變數(shù)組的形狀。
直接修改數(shù)組ndarray的shape值, 要求修改后乘積不變。
直接使用reshape函數(shù)創(chuàng)建一個(gè)改變尺寸的新數(shù)組,原數(shù)組的shape保持不變,但是新數(shù)組和原數(shù)組共享一個(gè)內(nèi)存空間,也就是修改任何一個(gè)數(shù)組中的值都會(huì)對(duì)另外一個(gè)產(chǎn)生影響,另外要求新數(shù)組的元素個(gè)數(shù)和原數(shù)組一致。
當(dāng)指定某一個(gè)軸為-1的時(shí)候,表示將根據(jù)數(shù)組元素的數(shù)量自動(dòng)計(jì)算該軸的長(zhǎng)度值。
arr = np.array([1,2,3,4,5,6,7,8]) print(arr.reshape(2,4)) arr = np.array([1,2,3,4,5,6,7,8]) print(arr.reshape(2,-1))# [[1 2 3 4] # [5 6 7 8]] # [[1 2 3 4] # [5 6 7 8]]NumPy基本操作
數(shù)組與標(biāo)量、數(shù)組之間的運(yùn)算
數(shù)組不用循環(huán)即可對(duì)每個(gè)元素執(zhí)行批量的算術(shù)運(yùn)算操作,這個(gè)過程叫做矢量化,即用數(shù)組表達(dá)式代替循環(huán)的做法。
矢量化數(shù)組運(yùn)算性能比純Python方式快上一兩個(gè)數(shù)據(jù)級(jí)。
大小相等的兩個(gè)數(shù)組之間的任何算術(shù)運(yùn)算都會(huì)將其運(yùn)算應(yīng)用到元素級(jí)上的操作。
元素級(jí)操作:在NumPy中,大小相等的數(shù)組之間的運(yùn)算,為元素級(jí)運(yùn)算,即只用于位置相同的元素之間,所得的運(yùn)算結(jié)果組成一個(gè)新的數(shù)組,運(yùn)算結(jié)果的位置跟操作數(shù)位置相同。
# 數(shù)組和標(biāo)量運(yùn)算 arr1 = np.array((1,2,3,4,5)) print(arr1+2) # [3 4 5 6 7] print(arr1-3) # [-2 -1 0 1 2] print(arr1*2) # [ 2 4 6 8 10] print(arr1/2) # [0.5 1. 1.5 2. 2.5] print(arr1**2) # [ 1 4 9 16 25] print(2**arr1) # [ 2 4 8 16 32] # 數(shù)組和數(shù)組運(yùn)算 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) arr3 = np.array([[10, 20, 30], [40, 50, 60]]) print(arr2+arr3) # 相乘的兩者結(jié)構(gòu)相同 print(arr2*arr3) print(arr2**arr3)# [[11 22 33] # [44 55 66]] # [[ 10 40 90] # [160 250 360]] # [[ 1 1048576 -1010140999] # [ 0 1296002393 0]]數(shù)組的矩陣積(matrix product)
矩陣積(matrix product):兩個(gè)二維矩陣(行和列的矩陣)滿足第一個(gè)矩陣的列數(shù)與第二個(gè)矩陣的行數(shù)相同,那么可以進(jìn)行矩陣的乘法,即矩陣積,矩陣積不是元素級(jí)的運(yùn)算。也稱為點(diǎn)積、數(shù)量積。
arr1 = np.array(((1, 2, 3),(4, 5, 6),(7, 8, 9))) arr2 = np.array(((1, 2),(3, 4),(5, 6))) print(np.dot(arr1,arr2)) print(arr1.dot(arr2))# [[ 22 28] # [ 49 64] # [ 76 100]]# [[ 22 28] # [ 49 64] # [ 76 100]]數(shù)組的索引與切片
ndarray-多維數(shù)組的索引
根據(jù)數(shù)組的形狀,進(jìn)行索引
arr2 = np.arange(27).reshape(3, 3, 3) print(arr2) print(arr2[0]) # 一維索引 print(arr2[0][1]) # 一維,二維 print(arr2[0][1][2]) # 一維,二維,三維 print(arr2[0, 1, 2]) # 推薦寫法# [[[ 0 1 2] # [ 3 4 5] # [ 6 7 8]] # [[ 9 10 11] # [12 13 14] # [15 16 17]] # [[18 19 20] # [21 22 23] # [24 25 26]]]# [[0 1 2] # [3 4 5] # [6 7 8]]# [3 4 5]# 5# 5切片
在各維度上單獨(dú)切片,如果某維度數(shù)據(jù)都保留,直接使用冒號(hào),不指定起始值和終值
從Numpy切片得到的數(shù)組,只是原來數(shù)組的一個(gè)視圖,內(nèi)部數(shù)據(jù)使用相同的存儲(chǔ)地址,所以對(duì)切片得到的數(shù)組修改會(huì)影響原數(shù)組
print(arr2[0:2, 1, :])# [[ 3 4 5] # [12 13 14]]布爾類型索引
利用布爾類型的數(shù)組進(jìn)行數(shù)據(jù)索引,最終返回的結(jié)果是對(duì)應(yīng)索引數(shù)組中數(shù)據(jù)為True位置的值。
ndarray-花式索引
花式索引(Fancy indexing)指的是利用整數(shù)數(shù)組進(jìn)行索引的方式
import numpy as nparr1 = np.arange(32).reshape(8, 4) print(arr1) print("========= 獲取 0,3,5 行的數(shù)據(jù) =========") print(arr1[[0, 3, 5]]) print("========= 獲取 (0,0),(3,2),(5,2) 的數(shù)據(jù) =========") print(arr1[[0, 3, 5], [0, 2, 2]]) print("========= 獲取 0,3,5 行 0,2,3 列的數(shù)據(jù) =========") print(arr1[[0, 3, 5]].T[[0, 2, 3]].T) print(arr1[np.ix_([0, 3, 5], [0, 2, 3])])# [[ 0 1 2 3] # [ 4 5 6 7] # [ 8 9 10 11] # [12 13 14 15] # [16 17 18 19] # [20 21 22 23] # [24 25 26 27] # [28 29 30 31]] # ========= 獲取 0,3,5 行的數(shù)據(jù) ========= # [[ 0 1 2 3] # [12 13 14 15] # [20 21 22 23]] # ========= 獲取 (0,0),(3,2),(5,2) 的數(shù)據(jù) ========= # [ 0 14 22] # ========= 獲取 0,3,5 行 0,2,3 列的數(shù)據(jù) ========= # [[ 0 2 3] # [12 14 15] # [20 22 23]] # [[ 0 2 3] # [12 14 15] # [20 22 23]]數(shù)組的轉(zhuǎn)置與軸對(duì)換
數(shù)組轉(zhuǎn)置是指將shape進(jìn)行重置操作,并將其值重置為原始shape元組的倒置,比如原始的shape值為:(2,3,4),那么轉(zhuǎn)置后的新元組的shape的值為: (4,3,2)f
對(duì)于二維數(shù)組而言(矩陣)數(shù)組的轉(zhuǎn)置其實(shí)就是矩陣的轉(zhuǎn)置
可以通過調(diào)用數(shù)組的transpose函數(shù)或者T屬性進(jìn)行數(shù)組轉(zhuǎn)置操作
arr1 = np.arange(20).reshape(5,-1) print(arr1) arr2 = arr1.transpose() print(arr2) arr3 = arr1.T print(arr3)################# [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11][12 13 14 15][16 17 18 19]] ################# [[ 0 4 8 12 16][ 1 5 9 13 17][ 2 6 10 14 18][ 3 7 11 15 19]] ################# [[ 0 4 8 12 16][ 1 5 9 13 17][ 2 6 10 14 18][ 3 7 11 15 19]]通用函數(shù):快速的元素級(jí)數(shù)組成函數(shù)
ufunc:numpy模塊中對(duì)ndarray中數(shù)據(jù)進(jìn)行快速元素級(jí)運(yùn)算的函數(shù),也可以看做是簡(jiǎn)單的函數(shù)(接受一個(gè)或多個(gè)標(biāo)量值,并產(chǎn)生一個(gè)或多個(gè)標(biāo)量值)的矢量化包裝器。
主要包括一元函數(shù)和二元函數(shù)
ndarray-通用函數(shù)/常用函數(shù)(一元函數(shù))
| 一元ufunc | 描述 | 調(diào)用方式 |
| abs, fabs | 計(jì)算整數(shù)、浮點(diǎn)數(shù)或者復(fù)數(shù)的絕對(duì)值,對(duì)于非復(fù)數(shù),可以使用更快的fabs | np.abs(arr) np.fabs(arr) |
| sqrt | 計(jì)算各個(gè)元素的平方根,相當(dāng)于arr ** 0.5, 要求arr的每個(gè)元素必須是非負(fù)數(shù) | np.sqrt(arr) |
| square | 計(jì)算各個(gè)元素的評(píng)分,相當(dāng)于arr ** 2 | np.square(arr) |
| exp | 計(jì)算各個(gè)元素的指數(shù)e的x次方 | np.exp(arr) |
| log、log10、 log2、log1p | 分別計(jì)算自然對(duì)數(shù)、底數(shù)為10的log、底數(shù)為2的log以及log(1+x);要求arr中的每個(gè)元素必須為正數(shù) | np.log(arr) np.log10(arr) np.log2(arr) np.log1p(arr) |
| sign | 計(jì)算各個(gè)元素的正負(fù)號(hào): 1 正數(shù),0:零,-1:負(fù)數(shù) | np.sign(arr) |
| ceil | 計(jì)算各個(gè)元素的ceiling值,即大于等于該值的最小整數(shù) | np.ceil(arr) |
| floor | 計(jì)算各個(gè)元素的floor值,即小于等于該值的最大整數(shù) | np.floor(arr) |
| rint | 將各個(gè)元素值四舍五入到最接近的整數(shù),保留dtype的類型 | np.rint(arr) |
| modf | 將數(shù)組中元素的小數(shù)位和整數(shù)位以兩部分獨(dú)立數(shù)組的形式返回 | np.modf(arr) |
| isnan | 返回一個(gè)表示“那些值是NaN(不是一個(gè)數(shù)字)”的布爾類型數(shù)組 | np.isnan(arr) |
| isfinite、isinf | 分別一個(gè)表示”那些元素是有窮的(非inf、非NaN)”或者“那些元素是無(wú)窮的”的布爾型數(shù)組 | np.isfinite(arr) np.isinf(arr) |
| cos、cosh、sin、 sinh、tan、tanh | 普通以及雙曲型三角函數(shù) | np.cos(arr) np.sin(arr) np.tan(arr) |
| arccos、arccosh、 arcsin、arcsinh、 arctan、arctanh | 反三角函數(shù) | np.arccos(arr) np.arrsin(arr) np.arrtan(arr) |
ndarray-通用函數(shù)/常用函數(shù)(二元函數(shù))
| 二元ufunc | 描述 | 調(diào)用方式 |
| mod | 元素級(jí)的取模 | np.mod(arr1,arr2) |
| dot | 求兩個(gè)數(shù)組的點(diǎn)積 | np.dot(arr1,arr2) |
| greater、greater_equal、less、 less_equal、equal、not_equal | 執(zhí)行元素級(jí)別的比較運(yùn)算,最終返回一個(gè)布爾型數(shù)組 | np.greater(arr1, arr2) np.less(arr1, arr2) np.equal(arr1, arr2) |
| logical_and、logical_or、 logical_xor | 執(zhí)行元素級(jí)別的布爾邏輯運(yùn)算,相當(dāng)于中綴運(yùn)算符&、|、^ | np.logical_and(arr1,arr2) np.logical_or(arr1,arr2) np.logical_xor(arr1,arr2) |
| power | 求解對(duì)數(shù)組中的每個(gè)元素進(jìn)行給定次數(shù)的指數(shù)值,類似于: arr ** 3 | np.power(arr, 3) |
聚合函數(shù)
聚合函數(shù)是對(duì)一組值(eg一個(gè)數(shù)組)進(jìn)行操作,返回一個(gè)單一值作為結(jié)果的函數(shù)。當(dāng)然聚合函數(shù)也可以指定對(duì)某個(gè)具體的軸進(jìn)行數(shù)據(jù)聚合操作;常將的聚合操作有:平均值、最大值、最小值、方差等等
當(dāng)axis=0表示列;axis=1表示行,不寫代表計(jì)算整個(gè)矩陣的
arr = np.array([[1, 5, 7, 4], [0, 6, 3, 8], [2, 6, 9, 7]]) print(arr) print('arr的最小值是:', arr.min()) print('arr的最大值是:', arr.max()) print('arr的平均值是:', arr.mean()) print('arr的標(biāo)準(zhǔn)差差是:', arr.std()) print('arr的方差是:', np.power(arr.std(),2)) print('arr中每一列的最小值是:', arr.min(axis=0)) # 當(dāng)axis=0表示列;axis=1表示行 print('arr中每一列的最大值是:', arr.max(axis=0)) print('arr中每一列的平均值是:', arr.mean(axis=0)) print('arr中每一行的最小值是:', arr.min(axis=1)) print('arr中每一行的最大值是:', arr.max(axis=1)) print('arr中每一行的平均值是:', arr.mean(axis=1))############################################################################### [[1 5 7 4][0 6 3 8][2 6 9 7]] arr的最小值是: 0 arr的最大值是: 9 arr的平均值是: 4.833333333333333 arr的標(biāo)準(zhǔn)差差是: 2.733536577809454 arr的方差是: 7.472222222222221 arr中每一列的最小值是: [0 5 3 4] arr中每一列的最大值是: [2 6 9 8] arr中每一列的平均值是: [1. 5.66666667 6.33333333 6.33333333] arr中每一行的最小值是: [1 0 2] arr中每一行的最大值是: [7 8 9] arr中每一行的平均值是: [4.25 4.25 6. ]np.where函數(shù)
np.where函數(shù)是三元表達(dá)式x if condition else y的矢量化版本
arr1 = np.array([-1.1,-1.2,-1.3,-1.4,-1.5]) arr2 = np.array([-2.1,-2.2,-2.3,-2.4,-2.5]) condition = (arr1<arr2) result1 = [x if c else y for (x,y,c) in zip(arr1, arr2, condition)] # 用于一維數(shù)組,不能用于多維 result2 = np.where(condition, arr1, arr2) # 適合任何維度 print('使用python語(yǔ)法,結(jié)果為:', result1,';數(shù)據(jù)類型為:', type(result1)) print('使用np.where語(yǔ)法,結(jié)果為:', result2,';數(shù)據(jù)類型為:', type(result2))# 使用python語(yǔ)法,結(jié)果為: [-2.1, -2.2, -2.3, -2.4, -2.5] ;數(shù)據(jù)類型為: <class 'list'> # 使用np.where語(yǔ)法,結(jié)果為: [-2.1 -2.2 -2.3 -2.4 -2.5] ;數(shù)據(jù)類型為: <class 'numpy.ndarray'>將數(shù)組中的所有異常數(shù)字替換為0,比如將NaN替換為0
arr3 = np.array([ [1, 2, np.nan, 4], [4, 5, 6, np.nan], [7, 8, 9, np.inf], [np.inf, np.e, np.pi, 4] ]) condition = np.isnan(arr3)|np.isinf(arr3) print(arr3) print(np.where(condition, 0, arr3))##############################################################3 [[1. 2. nan 4. ][4. 5. 6. nan][7. 8. 9. inf][ inf 2.71828183 3.14159265 4. ]] [[1. 2. 0. 4. ][4. 5. 6. 0. ][7. 8. 9. 0. ][0. 2.71828183 3.14159265 4. ]]np.unique函數(shù)
np.unique函數(shù)的主要作用是將數(shù)組中的元素進(jìn)行去重操作(也就是只保存不重復(fù)的數(shù)據(jù))
arr1 = np.array(['a', 'b', 'c', 'a', 'd', 'c', 'e']) arr2 = np.unique(arr1) print('原始數(shù)據(jù):', arr1) print('去重之后的數(shù)據(jù):', arr2)# 原始數(shù)據(jù): ['a' 'b' 'c' 'a' 'd' 'c' 'e'] # 去重之后的數(shù)據(jù): ['a' 'b' 'c' 'd' 'e']?
總結(jié)
以上是生活随笔為你收集整理的Python 第三方模块之 NumPy - 科学计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows10最常用的软件推荐V1.
- 下一篇: python email模块详解_pyt