【NumPy】常用姿勢(shì)積累

      網(wǎng)友投稿 736 2025-04-03

      文章目錄


      1.矩陣運(yùn)算

      2.arange()生成ndarray數(shù)組

      3.meshgrid

      4.通過(guò)array轉(zhuǎn)為二維數(shù)組

      5.利用 ix_()函數(shù)進(jìn)行數(shù)組切片

      6.數(shù)組連接

      7.數(shù)據(jù)的存取

      8.求逆、解方程、特征值

      9.奇異值分解、計(jì)算行列式

      10.argsort函數(shù)

      Reference

      如何導(dǎo)入并使用Numpy創(chuàng)建數(shù)組以及相關(guān)的數(shù)組運(yùn)算、獲得數(shù)組的尺寸、數(shù)組的四則運(yùn)算與數(shù)學(xué)函數(shù)運(yùn)算、數(shù)組的切片、數(shù)組連接和數(shù)據(jù)的存取、數(shù)組形態(tài)變換、數(shù)組元素的排序與搜索、矩陣及線(xiàn)性代數(shù)運(yùn)算等相關(guān)知識(shí)。

      由于Numpy借鑒了Matlab矩陣開(kāi)發(fā)思路,故Numpy的數(shù)組創(chuàng)建、運(yùn)算、切片、連接及存取、排序與搜索、矩陣及線(xiàn)性代數(shù)運(yùn)算均與Matlab的矩陣操作極為相似。

      NumPy 是一個(gè)運(yùn)行速度非常快的數(shù)學(xué)庫(kù),主要用于數(shù)組計(jì)算,包含:

      一個(gè)強(qiáng)大的N維數(shù)組對(duì)象 ndarray

      廣播功能函數(shù)

      整合 C/C++/Fortran 代碼的工具

      線(xiàn)性代數(shù)、傅里葉變換、隨機(jī)數(shù)生成等功能

      Numpy中,矩陣有兩種表示方式:

      matrix類(lèi)時(shí),比如2 x 3矩陣A不能和A自身相乘

      array類(lèi)時(shí),上面的A則可以相乘,默認(rèn)的乘法是Hadamard乘法(即矩陣之間的逐點(diǎn)乘積,對(duì)應(yīng)的矩陣元素相乘)。

      1.矩陣運(yùn)算

      (1)dot是點(diǎn)積,a.dot(b) 與 np.dot(a,b)效果相同。如果是直接A*B則是兩個(gè)矩陣對(duì)應(yīng)位置的元素分別進(jìn)行相乘得到新的矩陣。

      矩陣積計(jì)算不遵循交換律,np.dot(a,b) 和 np.dot(b,a) 得到的結(jié)果是不一樣的

      (2)transpose是矩陣轉(zhuǎn)置

      (3)inv是求矩陣的逆

      import numpy as np from numpy.linalg import inv A = np.matrix([[1, 2], [3, 4], [5, 6]]) print(A) print("=================") B = np.matrix(range(1, 7)).reshape(3, 2) print(B) print("=================") # 創(chuàng)建特殊矩陣 ans1 = np.zeros((3, 2)) print(ans1) print("=================") ans2 = np.identity(3) print(ans2) print("=================") # 矩陣中向量的提取 m = np.array(range(1, 10)).reshape(3, 3) print(m) print("=================") # 提取行向量 ans3 = m[[0, 2]] # m[[True, False, True]] print(ans3) print("=================") # 提取列向量 ans4 = m[:, [1, 2]] # 或者m[:, [False, True, True]] print(ans4) print("=================") # 矩陣的運(yùn)算 n = np.array(range(1, 5)).reshape(2, 2) print(n) print("=================") np.transpose(n) print(n) print("=================") add = n + n print(add) print("=================") plus = n - n print(plus) print("=================") # 矩陣的逆矩陣 #ni = inv(n) #print(ni) # 矩陣的逆和原矩陣相乘得到單位矩陣 danwei = np.dot(inv(n), n) print(danwei)

      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

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      2.arange()生成ndarray數(shù)組

      Numpy 中 arange() 主要是用于生成數(shù)組,具體用法如下

      numpy.arange(start, stop, step, dtype = None)

      在給定間隔內(nèi)返回均勻間隔的值。

      值在半開(kāi)區(qū)間 [開(kāi)始,停止]內(nèi)生成(換句話(huà)說(shuō),包括開(kāi)始但不包括停止的區(qū)間),返回的是 ndarray 。

      from numpy import * # 引入numpy A = arange(5) # 只有結(jié)束項(xiàng) print(A) # 結(jié)果 [0 1 2 3 4] 結(jié)果不包含結(jié)束項(xiàng) print(type(A)) # 結(jié)果 A = arange(1, 5) # 起點(diǎn)為1,步長(zhǎng)默認(rèn)為1 print(A) # 結(jié)果 [1 2 3 4] A = arange(1, 5, 2) # 步長(zhǎng)默認(rèn)為2 print(A) # 結(jié)果 [1 3] A = arange(1, 5.2, 0.6) # 浮點(diǎn)數(shù)參數(shù),結(jié)果就不一定完全符合了 print(A) # 結(jié)果 [1. 1.6 2.2 2.8 3.4 4. 4.6 5.2]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      3.meshgrid

      meshgrid適合畫(huà)3D圖,而mgrid適合畫(huà)2D圖。

      適用于生成網(wǎng)格型數(shù)據(jù),可以接受兩個(gè)一維數(shù)組生成兩個(gè)二維矩陣,對(duì)應(yīng)兩個(gè)數(shù)組中所有的(x,y)對(duì)。

      那么生成的第一個(gè)二維數(shù)組是以xarray為行,共ydimesion行的向量;

      而第二個(gè)二維數(shù)組是以yarray的轉(zhuǎn)置為列,共xdimesion列的向量。

      import numpy as np xnums = np.arange(4) #print(xnums)# [0 1 2 3] #print(type(xnums)) # ynums = np.arange(5) data_list = np.meshgrid(xnums, ynums) # meshgrid生成網(wǎng)格型數(shù)據(jù),接受2個(gè)一維數(shù)組生成2個(gè) print(data_list) x, y = data_list print(x.shape) print(y.shape) print(x) print(y)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      輸出結(jié)果為:

      [array([[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]), array([[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]])] (5, 4) (5, 4) [[0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3]] [[0 0 0 0] [1 1 1 1] [2 2 2 2] [3 3 3 3] [4 4 4 4]]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      4.通過(guò)array轉(zhuǎn)為二維數(shù)組

      L=[[1,2],[3,4]] #定義待轉(zhuǎn)化的嵌套列表L print(L) import numpy #導(dǎo)入Numpy包 A=numpy.array(L) #調(diào)用Numpy包中提供的函數(shù)array(),將L轉(zhuǎn)化為二維數(shù)組并賦給A # 即將數(shù)據(jù)轉(zhuǎn)為數(shù)組的形式 print(A) # [[1, 2], [3, 4]] # [[1 2] [3 4]]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      也可以用其他的嵌套方式再用array函數(shù):

      #1.先預(yù)定義列表d1,元組d2,嵌套列表d3、d4和嵌套元組d5 d1=[1,2,3,4,0.1,7] #列表 d2=(1,2,3,4,2.3) #元組 d3=[[1,2,3,4],[5,6,7,8]] #嵌套列表,元素為列表 d4=[(1,2,3,4),(5,6,7,8)] #嵌套列表,元素為元組 d5=((1,2,3,4),(5,6,7,8)) #嵌套元組 #2.導(dǎo)入Numpy,并調(diào)用其中的array函數(shù),創(chuàng)建數(shù)組 import numpy as np d11=np.array(d1) d21=np.array(d2) d31=np.array(d3) d41=np.array(d4) d51=np.array(d5)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      5.利用 ix_()函數(shù)進(jìn)行數(shù)組切片

      # 2.5.2 利用 ix_()函數(shù)進(jìn)行數(shù)組切片 import numpy as np D=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]) #定義數(shù)組D #提取D中行數(shù)為1、2,列數(shù)為1、3的所有元素 D3=D[np.ix_([1,2],[1,3])] #提取D中行數(shù)為0、1,列數(shù)為1、3的所有元素 D4=D[np.ix_(np.arange(2),[1,3])] #提取以D中第1列小于11得到的邏輯數(shù)組作為行索引,列數(shù)為1、2的所有元素 D6=D[np.ix_(D[:,1]<11,[1,2])] #提前以D中第1列小于11得到的邏輯數(shù)組作為行索引,列數(shù)為2的所有元素 D7=D[np.ix_(D[:,1]<11,[2])] #提前以第2.5.1節(jié)中的TF=[True,False,False,True]邏輯列表為行索引,列數(shù)為2的所有元素 TF=[True,False,False,True] D8=D[np.ix_(TF,[2])] #提前以第2.5.1節(jié)中的TF=[True,False,False,True]邏輯列表為行索引,列數(shù)為1、3的所有元素 D9=D[np.ix_(TF,[1,3])]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      6.數(shù)組連接

      # 2.6 數(shù)組連接 import numpy as np A=np.array([[1,2],[3,4]]) #定義二維數(shù)組A B=np.array([[5,6],[7,8]]) #定義二維數(shù)組B C_s=np.hstack((A,B)) #水平連接要求行數(shù)相同 C_v=np.vstack((A,B)) #垂直連接要求列數(shù)相同

      1

      2

      3

      4

      5

      6

      7.數(shù)據(jù)的存取

      # 2.7 數(shù)據(jù)存取 import numpy as np A=np.array([[1,2],[3,4]]) #定義二維數(shù)組A B=np.array([[5,6],[7,8]]) #定義二維數(shù)組B C_s=np.hstack((A,B)) #水平連接 np.save('data',C_s) import numpy as np C_s=np.load('data.npy')

      1

      2

      3

      4

      【NumPy】常用姿勢(shì)積累

      5

      6

      7

      8

      9

      8.求逆、解方程、特征值

      # 2.10.1 創(chuàng)建Numpy矩陣 import numpy as np # 用mat則不會(huì)為矩陣創(chuàng)建副本 mat1 = np.mat("1 2 3; 4 5 6; 7 8 9") mat2 = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print("mat1: \n",mat1) print("mat2: \n",mat2) print("-"*40) import numpy as np arr1 = np.eye(3) arr2 = 3*arr1 mat = np.bmat("arr1 arr2; arr1 arr2") # 分塊矩陣,bmat嵌套矩陣 print("arr1 :\n",arr1) print("arr2 :\n",arr2) print("mat: \n",mat) print("-"*40) # 2.10.2 矩陣的屬性和基本運(yùn)算 import numpy as np mat = np.matrix(np.arange(4).reshape(2, 2)) print("mat:\n",mat) mT=mat.T # 返回自身的轉(zhuǎn)置 mH=mat.H # 返回自身的共軛轉(zhuǎn)置 mI=mat.I # 返回自身的逆矩陣 print("-"*40) import numpy as np mat1 = np.mat("1 2 3; 4 5 6; 7 8 9") mat2 = mat1*3 mat3=mat1+mat2 mat4=mat1-mat2 mat5=mat1*mat2 mat6=np.multiply(mat1, mat2) #點(diǎn)乘 print("-"*40) # 2.10.3 線(xiàn)性代數(shù)運(yùn)算 # 1.計(jì)算逆矩陣 import numpy as np mat = np.mat('1 1 1; 1 2 3; 1 3 6') inverse = np.linalg.inv(mat) print(inverse) # mat矩陣和inverse矩陣進(jìn)行點(diǎn)乘 A=np.dot(mat, inverse) print("A和A的逆矩陣點(diǎn)乘的結(jié)果:\n",A) print("-"*40) # 2.求解線(xiàn)性方程組 import numpy as np A = np.mat("1,-1,1; 2,1,0; 2,1,-1") b = np.array([4, 3, -1]) x = np.linalg.solve(A, b)#線(xiàn)性方程組Ax=b的解 print("Ax=b的解為:",x) print("-"*40) # 3.求解特征值與特征向量 import numpy as np A = np.matrix([[1, 0, 2], [0, 3, 0], [2, 0, 1]]) # A_value= np.linalg.eigvals(A) # 也可以這樣求特征值 A_value, A_vector = np.linalg.eig(A) print("A矩陣的特征值為:",A_value) print("A矩陣的特征向量為:\n",A_vector) print("-"*40)

      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

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      結(jié)果為:

      mat1: [[1 2 3] [4 5 6] [7 8 9]] mat2: [[1 2 3] [4 5 6] [7 8 9]] ---------------------------------------- arr1 : [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] arr2 : [[3. 0. 0.] [0. 3. 0.] [0. 0. 3.]] mat: [[1. 0. 0. 3. 0. 0.] [0. 1. 0. 0. 3. 0.] [0. 0. 1. 0. 0. 3.] [1. 0. 0. 3. 0. 0.] [0. 1. 0. 0. 3. 0.] [0. 0. 1. 0. 0. 3.]] ---------------------------------------- mat: [[0 1] [2 3]] ---------------------------------------- ---------------------------------------- [[ 3. -3. 1.] [-3. 5. -2.] [ 1. -2. 1.]] A和A的逆矩陣點(diǎn)乘的結(jié)果: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ---------------------------------------- Ax=b的解為: [1. 1. 4.] ---------------------------------------- A矩陣的特征值為: [ 3. -1. 3.] A矩陣的特征向量為: [[ 0.70710678 -0.70710678 0. ] [ 0. 0. 1. ] [ 0.70710678 0.70710678 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

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      9.奇異值分解、計(jì)算行列式

      # 4.奇異值分解 import numpy as np A = np.mat("4.0,11.0,14.0; 8.0,7.0,-2.0") U, Sigma, V = np.linalg.svd(A, full_matrices=False) # U和V是正交矩陣 print("U:",U) print("一開(kāi)始的Sigma:",Sigma) # Sigma是一維的,其元素為進(jìn)行奇異值分解的矩陣的非奇異值,可用dig生成對(duì)角矩陣 Sigma = np.diag(Sigma) print("變?yōu)閷?duì)角矩陣Sigma:\n",Sigma) print("V:",V) print("-"*40) # 5.計(jì)算矩陣行列式的值 import numpy as np A = np.mat("3,4; 5,6") A_value=np.linalg.det(A) print("A的行列式為:\n",A_value) print("-"*40)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      結(jié)果為:

      U: [[ 0.9486833 -0.31622777] [ 0.31622777 0.9486833 ]] 一開(kāi)始的Sigma: [18.97366596 9.48683298] 變?yōu)閷?duì)角矩陣Sigma: [[18.97366596 0. ] [ 0. 9.48683298]] V: [[ 0.33333333 0.66666667 0.66666667] [ 0.66666667 0.33333333 -0.66666667]] ---------------------------------------- A的行列式為: -2.0000000000000004 ----------------------------------------

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      10.argsort函數(shù)

      import numpy as np x = np.array([1, 4, 3, -1, 6, 9]) print(x.argsort()) # [3 0 2 1 4 5]

      1

      2

      3

      4

      argsort()函數(shù)是將x中的元素從小到大排列,提取其對(duì)應(yīng)的index(索引),然后輸出到y(tǒng)。例如:x[3]=-1最小,所以y[0]=3,x[5]=9最大,所以y[5]=5。

      Reference

      (1)numpy官方文檔

      (2)【numpy】np.argsort()函數(shù)

      Numpy 數(shù)據(jù)結(jié)構(gòu) 機(jī)器學(xué)習(xí)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:關(guān)于 Kubernetes中API Server授權(quán)(RBAC)管理的一些筆記(關(guān)于我轉(zhuǎn)生變成史萊姆這檔事)
      下一篇:WPS表格復(fù)制文檔表格中如何保持原狀(wpsword怎么復(fù)制表格保持原有格式)
      相關(guān)文章
      亚洲色图在线观看| 亚洲人成小说网站色| 老司机亚洲精品影院无码| 国产亚洲精品美女久久久久| 亚洲人成网站色在线观看| 亚洲免费观看在线视频| 中文字幕亚洲综合久久| 久久久无码精品亚洲日韩蜜臀浪潮 | 亚洲精品国产精品乱码不卡| 亚洲 小说区 图片区 都市| 无码不卡亚洲成?人片| 亚洲AV成人精品日韩一区| 无码天堂亚洲国产AV| 亚洲А∨精品天堂在线| 亚洲视频人成在线播放| 久久久久亚洲AV成人网人人网站 | 亚洲国产日韩在线人成下载| 亚洲成a人片在线观| 亚洲a视频在线观看| 亚洲中文字幕久久精品蜜桃| 亚洲熟女精品中文字幕| 亚洲女女女同性video| 国产成人综合久久精品亚洲| 亚洲精品麻豆av| 国产亚洲大尺度无码无码专线 | 亚洲综合国产一区二区三区| 亚洲高清专区日韩精品| 亚洲成人动漫在线| 亚洲日本乱码一区二区在线二产线| 亚洲明星合成图综合区在线| 亚洲 欧洲 日韩 综合在线| 亚洲av日韩综合一区二区三区| 五月婷婷亚洲综合| 亚洲一区二区三区在线观看精品中文 | 蜜芽亚洲av无码一区二区三区| 亚洲 综合 国产 欧洲 丝袜| 亚洲综合国产一区二区三区| 亚洲精品免费视频| 亚洲乱人伦精品图片| 亚洲精品人成网线在线播放va| 亚洲国产精品专区在线观看|