本文主講Python中Numpy數(shù)組的類型、全0全1數(shù)組的生成、隨機(jī)數(shù)組、數(shù)組操作、矩陣的簡單運(yùn)算、矩陣的數(shù)學(xué)運(yùn)算。
盡管可以用python中l(wèi)ist嵌套來模擬矩陣,但使用Numpy庫更方便。
定義數(shù)組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
>>> import numpy as np >>> m = np.array([[ 1 , 2 , 3 ], [ 2 , 3 , 4 ]]) #定義矩陣,int64 >>> m array([[ 1 , 2 , 3 ], [ 2 , 3 , 4 ]]) >>> m = np.array([[ 1 , 2 , 3 ], [ 2 , 3 , 4 ]], dtype = np. float ) #定義矩陣,float64 >>> m array([[ 1. , 2. , 3. ], [ 2. , 3. , 4. ]]) >>> print (m.dtype) #數(shù)據(jù)類型 float64 >>> print (m.shape) #形狀2行3列 ( 2 , 3 ) >>> print (m.ndim) #維數(shù) 2 >>> print (m.size) #元素個(gè)數(shù) 6 >>> print ( type (m)) < class 'numpy.ndarray' > |
還有一些特殊的方法可以定義矩陣
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
|
>>> m = np.zeros(( 2 , 2 )) #全0 >>> m array([[ 0. , 0. ], [ 0. , 0. ]]) >>> print ( type (m)) #也是ndarray類型 < class 'numpy.ndarray' > >>> m = np.ones(( 2 , 2 , 3 )) #全1 >>> m = np.full(( 3 , 4 ), 7 ) #全為7 >>> np.eye( 3 ) #單位矩陣 array([[ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 0. , 0. , 1. ]]) >>> np.arange( 20 ).reshape( 4 , 5 ) #生成一個(gè)4行5列的數(shù)組 >>> >>> np.random.random(( 2 , 3 )) #[0,1)隨機(jī)數(shù) array([[ 0.51123127 , 0.40852721 , 0.26159126 ], [ 0.42450279 , 0.34763668 , 0.06167501 ]]) >>> np.random.randint( 1 , 10 ,( 2 , 3 )) #[1,10)隨機(jī)整數(shù)的2行3列數(shù)組 array([[ 5 , 4 , 9 ], [ 2 , 5 , 7 ]]) >>> np.random.randn( 2 , 3 ) #正態(tài)隨機(jī)分布 array([[ - 0.29538656 , - 0.50370707 , - 2.05627716 ], [ - 1.50126655 , 0.41884067 , 0.67306605 ]]) >>> np.random.choice([ 10 , 20 , 30 ], ( 2 , 3 )) #隨機(jī)選擇 array([[ 10 , 20 , 10 ], [ 30 , 10 , 20 ]]) >>> np.random.beta( 1 , 10 ,( 2 , 3 )) #貝塔分布 array([[ 0.01588963 , 0.12635485 , 0.22279098 ], [ 0.08950147 , 0.02244569 , 0.00953366 ]]) |
操作數(shù)組
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
|
>>> from numpy import * >>> a1 = array([ 1 , 1 , 1 ]) #定義一個(gè)數(shù)組 >>> a2 = array([ 2 , 2 , 2 ]) >>> a1 + a2 #對(duì)于元素相加 array([ 3 , 3 , 3 ]) >>> a1 * 2 #乘一個(gè)數(shù) array([ 2 , 2 , 2 ]) ## >>> a1 = np.array([ 1 , 2 , 3 ]) >>> a1 array([ 1 , 2 , 3 ]) >>> a1 * * 3 #表示對(duì)數(shù)組中的每個(gè)數(shù)做立方 array([ 1 , 8 , 27 ]) ##取值,注意的是它是以0為開始坐標(biāo),不matlab不同 >>> a1[ 1 ] 2 ##定義多維數(shù)組 >>> a3 = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]]) >>> a3 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) >>> a3[ 0 ] #取出第一行的數(shù)據(jù) array([ 1 , 2 , 3 ]) >>> a3[ 0 , 0 ] #第一行第一個(gè)數(shù)據(jù) 1 >>> a3[ 0 ][ 0 ] #也可用這種方式 1 >>> a3 array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ]]) >>> a3. sum (axis = 0 ) #按行相加,列不變 array([ 5 , 7 , 9 ]) >>> a3. sum (axis = 1 ) #按列相加,行不變 array([ 6 , 15 ]) |
矩陣的數(shù)學(xué)運(yùn)算
關(guān)于方陣
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
>>> m = np.array([[ 1 , 2 , 3 ], [ 2 , 2 , 3 ], [ 2 , 3 , 4 ]]) #定義一個(gè)方陣 >>> m array([[ 1 , 2 , 3 ], [ 2 , 2 , 3 ], [ 2 , 3 , 4 ]]) >>> print (np.linalg.det(m)) #求行列式 1.0 >>> print (np.linalg.inv(m)) #求逆 [[ - 1. 1. 0. ] [ - 2. - 2. 3. ] [ 2. 1. - 2. ]] >>> print (np.linalg.eig(m)) #特征值 特征向量 (array([ 7.66898014 + 0.j , - 0.33449007 + 0.13605817j , - 0.33449007 - 0.13605817j ]), array([[ - 0.47474371 + 0.j , - 0.35654645 + 0.23768904j , - 0.35654645 - 0.23768904j ], [ - 0.53664812 + 0.j , 0.80607696 + 0.j , 0.80607696 - 0.j ], [ - 0.6975867 + 0.j , - 0.38956192 - 0.12190158j , - 0.38956192 + 0.12190158j ]])) >>> y = np.array([ 1 , 2 , 3 ]) >>> print (np.linalg.solve(m, y)) #解方程組 [ 1. 3. - 2. ] |
矩陣乘法
矩陣乘:按照線性代數(shù)的乘法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> a = np.array([[ 1 , 2 , 3 ], [ 2 , 3 , 4 ]]) >>> b = np.array([[ 1 , 2 ], [ 3 , 4 ], [ 5 , 6 ]]) >>> a array([[ 1 , 2 , 3 ], [ 2 , 3 , 4 ]]) >>> b array([[ 1 , 2 ], [ 3 , 4 ], [ 5 , 6 ]]) >>> np.dot(a, b) #方法一 array([[ 22 , 28 ], [ 31 , 40 ]]) >>> np.matmul(a,b) #方法二 array([[ 22 , 28 ], |
注:一維數(shù)組之間運(yùn)算時(shí),dot()表示的是內(nèi)積。
點(diǎn)乘:對(duì)應(yīng)位置相乘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
>>> a = np.array([[ 1 , 2 ],[ 3 , 4 ]]) >>> b = np.array([[ 1 , 1 ],[ 2 , 2 ]]) >>> a array([[ 1 , 2 ], [ 3 , 4 ]]) >>> b array([[ 1 , 1 ], [ 2 , 2 ]]) >>> a * b #方法一 array([[ 1 , 2 ], [ 6 , 8 ]]) >>> np.multiply(a, b) #方法二 array([[ 1 , 2 ], [ 6 , 8 ]]) |
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/lfri/p/10561001.html