python的numpy库提供矩阵运算的功能,因此我们在需要矩阵运算的时候,需要导入numpy的包。
from numpy import * ; #导入numpy的库函数
import numpy as np; #这个方式使用numpy的函数时,需要以np.开头。
1. 矩阵相乘
矩阵相乘的条件是第一个矩阵的列数等于第二个矩阵的行数。
输入:
import numpy as np
data = np.mat([[3, 4, 4], [4, 9, 7], [2, 3, 3]])
data1 = np.mat([[2, 3], [4, 5], [6, 7]])
print(data*data1)
结果:一个3x3的矩阵乘以3x2的矩阵,为一个3x2的矩阵
[[ 46 57]
[ 86 106]
[ 34 42]]
还可以用dot(A,B)函数,这个函数执行的是严格的矩阵乘法
data = np.array([[3, 4, 4], [4, 9, 7], [2, 3, 3]])
data1 = np.array([[2, 3], [4, 5], [6, 7]])
print(np.dot(data, data1))
结果:
[[ 46 57]
[ 86 106]
[ 34 42]]
2. 实现对应元素相乘
各个矩阵对应元素做乘法,若 A 为 m * n 的矩阵,B 为 m * n 的矩阵,得到一个 m*n 的矩阵。
data = np.mat([[3, 4], [4, 9], [2, 3]])
data1 = np.mat([[2, 3], [4, 5], [6, 7]])
print(np.multiply(data,data1))
结果:
[[ 6 12]
[16 45]
[12 21]]
3.矩阵相加
矩阵行数和列数要相同(同型)
data = np.mat([[3, 4, 4], [4, 9, 7], [2, 3, 3]])
data_2 = np.mat([[2, 4, 4], [4, 4, 7], [2, 5, 3]])
print(data+data_2)
4.矩阵求逆
矩阵A可逆的充分必要条件是|A|≠0,Singular matrix奇异矩阵不可求逆。
import numpy as np
data3 = np.mat([[3, 4], [4, 5]])
print(np.linalg.inv(data3)) #data3.I,矩阵对象可以通过 .I 求逆
若通过array初始化一个矩阵,用 .I 求逆将出错,可使用matirx转化后再求逆。
import numpy as np
data3 = np.array([[3, 4], [4, 5]])
print(data3.I)
AttributeError: 'numpy.ndarray' object has no attribute 'I'
对一个奇异矩阵求逆将出错
A = np.zeros((4, 4))
A[0, -1] = 1
A[-1, 0] = -1
B=np.matrix(A) # 使用.I求逆先用matrix转化
print(B.I)
numpy.linalg.LinAlgError: Singular matrix
由于奇异矩阵或非方阵的矩阵不存在逆矩阵,但可以用函数pinv(A)求其伪逆矩阵。伪逆矩阵是逆矩阵的广义形式。函数返回一个与A的转置矩阵A’ 同型的矩阵。
A = np.zeros((3, 4))
A[0, -1] = 1
A[-1, 0] = -1
print(np.linalg.pinv(A))
结果:
[[ 0. 0. -1.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 1. 0. 0.]]
5.矩阵的转置
A = np.mat([[2, 3, 1],
[6, 7, 8]])
print(A.T)
输出:
[[2 6]
[3 7]
[1 8]]