熟练使用python计算向量、矩阵、数组之后,是不是就不用matlab了?应该不是,matlab的函数完善,而python我还不知道缺什么函数和功能。
基本操作 创建
import numpy as np
#创建行向量[1,2,3]
print(np.array([1,2,3]))
#创建列向量[[1],[2],[3]]
print(np.array([[1],[2],[4]]))
#创建矩阵
print(np.array([[1,2,3],[4,5,6],[7,8,9]]))
#创建矩阵
print(np.mat([[1,2,3],[4,5,6],[7,8,9]])) #不推荐,因为大多数操作都是数组而不是矩阵数据结构mat
#-------创建三维矩阵-------
#创建1个2X3的0矩阵
print('>',np.zeros((1,2,3)))
#创建两个2X2的0矩阵
print('>',np.zeros((2,2,2)))
#创建两个3X3的1矩阵
print('>>>',np.ones((2,3,3)))
#-----------------------
from scipy import sparse
#创建稀疏矩阵
matrix =np.array([[0,0,0,1],[0,2,0,1],[1,0,3,0]])
#创建一个压缩的稀疏行矩阵compressed sparse row
print(sparse.csr_matrix(matrix))
[1 2 3] [[1] [2] [4]] [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [7 8 9]] > [[[0. 0. 0.] [0. 0. 0.]]] > [[[0. 0.] [0. 0.]] [[0. 0.] [0. 0.]]] >>> [[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]] [[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]] (0, 3) 1 (1, 1) 2 (1, 3) 1 (2, 0) 1 (2, 2) 3选择元素
import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6])
#创建矩阵
m = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
#第5个
print(v[5-1])
#第三行第二个元素
print(m[3-1][2-1])
print(m[2,1])
#选取向量所有元素
print(v[:])
#选取0到第三个
print(v[:3])
#选取第三个到最后
print(v[3:])
#选取最后一个
print(v[-1])
#选取矩阵全部
print(m[:])
print(m)
#选取矩阵第一行
print(m[0,:])
#选取第一行和第三行
print(m[0,:],m[2,:])
#选取第二列
print(m[:,1])
5 8 8 [1 2 3 4 5 6] [1 2 3] [4 5 6] 6 [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [4 5 6] [7 8 9]] [1 2 3] [1 2 3] [7 8 9] [2 5 8]矩阵的属性
import numpy as np
from scipy import sparse
m = np.array([[1,2,3,4],
[5,6,7,8],
[9,10,11,12]])
#行,列
a = m.shape
print(a)
print('r=%d,c=%d'%(a[0],a[1]))
#元素数量
print(m.size)
#矩阵的维数
print(m.ndim)
(3, 4) r=3,c=4 12 2
虽然矩阵有4列,但是因为4个基向量是线性相关的,最大线性无关组只有两个,维数也就只有两个。
矩阵的秩import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0]])
print(np.linalg.matrix_rank(m))
2矩阵的迹
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0]])
print(m.trace())
15vectorize
import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6])
#创建矩阵
m = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
#创建一个向量化的函数
func = np.vectorize(lambda x:x+100) #vectorize把一个函数变成另一个函数
#对所有元素应用这个函数
print(func(m))
#直接操作也行
print(m-100)
print(m*2)
print(m/2)
[[101 102 103] [104 105 106] [107 108 109]] [[-99 -98 -97] [-96 -95 -94] [-93 -92 -91]] [[ 2 4 6] [ 8 10 12] [14 16 18]] [[0.5 1. 1.5] [2. 2.5 3. ] [3.5 4. 4.5]]最值、平均值、方差、标准差
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3],
[4,5,6],
[7,8,9]])
print(np.max(m))
print(np.min(m))
print(np.mean(m))
print(np.var(m))
print(np.std(m))
9 1 5.0 6.666666666666667 2.581988897471611矩阵变形
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0]])
#变形前后元素个数一样
print(m.reshape(2,6))
[[1 2 3 0 4 5] [6 0 7 8 9 0]]转置
import numpy as np
from scipy import sparse
#创建行向量
v = np.array([1,2,3,4,5,6,7,8,9])
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0]])
print(m.T)
#向量只是值的集合,不能转置
print(v)
print(v.T)
print(np.array([1,2,3,4,5,6,7,8,9]).T)
[[1 4 7] [2 5 8] [3 6 9] [0 0 0]] [1 2 3 4 5 6 7 8 9] [1 2 3 4 5 6 7 8 9] [1 2 3 4 5 6 7 8 9]矩阵展开
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0]])
print(m.flatten())
[1 2 3 0 4 5 6 0 7 8 9 0]高级操作 行列式
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0],
[0,0,0,0]])
print(np.linalg.det(m))
0.0对角线元素
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,0],
[4,5,6,0],
[7,8,9,0] ])
print(m.diagonal())
[1 5 9]特征值和特征向量
import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,7],
[4,5,6,0],
[7,8,9,0],
[0,0,1,4]])
#特征值和特征向量
a,b = np.linalg.eig(m)
print(a)
print('-------------')
print(b)
[16.33839194+0.j -0.29035096+0.55867363j -0.29035096-0.55867363j 3.24230999+0.j ] ------------- [[-0.25665901+0.j -0.69644039+0.j -0.69644039-0.j 0.70851102+0.j ] [-0.52018868+0.j 0.14699415-0.42878781j 0.14699415+0.42878781j -0.35480461+0.j ] [-0.81191118+0.j 0.37461056+0.39175996j 0.37461056-0.39175996j -0.36840126+0.j ] [-0.06580365+0.j -0.07416678-0.10096959j -0.07416678+0.10096959j 0.48621634+0.j ]]点积和叉积
import numpy as np
from scipy import sparse
a = np.array([1,2,3,4])
b = np.array([11,2,3,4])
print(np.dot(a,b))
c = np.array([[34,2],
[1,3]])
d = np.array([[2,9],
[0,1]])
print(np.cross(c,d)) #cross必须是两个二维矩阵相叉乘,或两个三维矩阵相叉乘
e = np.array([[1,2],
[1,0]])
f = np.array([[3,5],
[1,2]])
print(np.cross(e,f))
40 [302 1] [-1 2]
两个二维矩阵叉乘公式
A
=
[
a
11
a
12
a
21
a
22
]
A = left[ begin{matrix} a_{11} quad a_{12} \ a_{21} quad a_{22} \ end{matrix}\ right]
A=[a11a12a21a22]
B
=
[
b
11
b
12
b
21
b
22
]
B = left[ begin{matrix} b_{11} quad b_{12} \ b_{21} quad b_{22} \ end{matrix} right]
B=[b11b12b21b22]
A × B = [ a 11 b 12 − a 12 b 11 a 21 b 22 − a 22 b 21 ] Atimes B = left[ begin{matrix} a_{11}b_{12} - a_{12}b_{11} qquad a_{21}b_{22} - a_{22}b_{21}end{matrix}right] A×B=[a11b12−a12b11a21b22−a22b21]
矩阵的逆import numpy as np
from scipy import sparse
#创建矩阵
m = np.array([[1,2,3,7],
[4,5,6,4],
[7,8,9,2],
[1,3,12,5]])
print(np.linalg.inv(m))
[[ 8.42857143e+00 -2.01428571e+01 1.04285714e+01 1.42857143e-01] [-8.85714286e+00 2.12857143e+01 -1.08571429e+01 -2.85714286e-01] [ 1.09523810e+00 -2.80952381e+00 1.42857143e+00 1.42857143e-01] [ 1.00000000e+00 -2.00000000e+00 1.00000000e+00 1.70803542e-17]]生成随机数
import numpy as np #设置随机数种子 np.random.seed(0) #生成3个0到1的数 print(np.random.random(3)) #默认0~1 #生成3个1到100的整数 print(np.random.randint(0,101,3)) #从1<=x<2 中抽3个 print(np.random.uniform(1,2,3)) #正态分布 #平均值0,标准差1 print(np.random.normal(0,1,3)) #逻辑分布 #平均值0,散布程度1 print(np.random.logistic(0,1,3))
[0.5488135 0.71518937 0.60276338] [67 9 83] [1.64589411 1.43758721 1.891773 ] [-0.10321885 0.4105985 0.14404357] [ 0.27387744 2.52093742 -2.57088231]



