日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Python 第三方模块之 NumPy - 科学计算

發(fā)布時(shí)間:2023/12/20 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 第三方模块之 NumPy - 科学计算 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

NumPy 簡(jiǎn)介

NumPy?發(fā)展歷史

  • 1995年 Jim HugUNin開發(fā)了Numeric。
  • 隨后,Numarray包誕生。
  • Travis Oliphants整合Numeric和Numarray,開發(fā)Numpy,于2006年發(fā)布第一個(gè)版本。
  • Numpy(Numeric Python)提供了許多高級(jí)的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運(yùn)算庫(kù)。專為進(jìn)行嚴(yán)格的數(shù)字處理而產(chǎn)生。多為很多大型金融公司使用,以及核心的科學(xué)計(jì)算組織如:Lawrence Livermore,NASA用其處理一些本來使用C++,Fortran或Matlab等所做的任務(wù)。
  • 使用Anaconda發(fā)行版的Python,已經(jīng)幫我們事先安裝好了Numpy模塊,因此無(wú)需另外安裝。
  • 依照標(biāo)準(zhǔn)的Numpy約定,習(xí)慣使用 import numpy as np方式導(dǎo)入該模塊。
  • NumPy模塊

    numPyNumerical 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、Pandasmatplotlib簡(jiǎn)介

  • NumPy?——基礎(chǔ),以矩陣為基礎(chǔ)的數(shù)學(xué)計(jì)算模塊,純數(shù)學(xué)存儲(chǔ)和處理大型矩陣。??這個(gè)是很基礎(chǔ)的擴(kuò)展,其余的擴(kuò)展都是以此為基礎(chǔ)。

  • Scipy——數(shù)值計(jì)算庫(kù),在NumPy?庫(kù)的基礎(chǔ)上增加了眾多的數(shù)學(xué)、科學(xué)以及工程計(jì)算中常用的庫(kù)函數(shù)。??方便、易于使用、專為科學(xué)和工程設(shè)計(jì)的Python工具包.它包括統(tǒng)計(jì),優(yōu)化,整合,線性代數(shù)模塊,傅里葉變換,信號(hào)和圖像處理,常微分方程求解器等等。
  • Pandas——數(shù)據(jù)分析,基于NumPy? 的一種工具,為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的.Pandas 納入了大量庫(kù)和一些標(biāo)準(zhǔn)的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。
  • matplotlib——繪圖,對(duì)于圖像美化方面比較完善,可以自定義線條的顏色和式樣,可以在一張繪圖紙上繪制多張小圖,也可在一張圖上繪制多條線,可以很方便的對(duì)數(shù)據(jù)進(jìn)行可視化分析。
  • 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).
    arr = np.random.randint(1, 9, size=(3,3)) print(arr.ndim) # 2 print(arr.shape) # (3, 3) print(arr.dtype) # int32 print(arr.size) # 9 print(arr.itemsize) # 4

    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) # int64

    ndarray修改形狀

    對(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ù)ex次方

    np.exp(arr)

    loglog10

    log2log1p

    分別計(jì)算自然對(duì)數(shù)、底數(shù)為10log、底數(shù)為2log以及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)

    isfiniteisinf

    分別一個(gè)表示那些元素是有窮的(inf、非NaN)”或者那些元素是無(wú)窮的的布爾型數(shù)組

    np.isfinite(arr)

    np.isinf(arr)

    coscoshsin

    sinhtantanh

    普通以及雙曲型三角函數(shù)

    np.cos(arr)

    np.sin(arr)

    np.tan(arr)

    arccosarccosh

    arcsin、arcsinh、

    arctanarctanh

    反三角函數(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)

    greatergreater_equalless

    less_equalequalnot_equal

    執(zhí)行元素級(jí)別的比較運(yùn)算,最終返回一個(gè)布爾型數(shù)組

    np.greater(arr1, arr2)

    np.less(arr1, arr2)

    np.equal(arr1, arr2)

    logical_andlogical_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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。