矩阵的基本运算(相乘、相加、求逆、转置)

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]]

猜你喜欢

转载自blog.csdn.net/qq_36455412/article/details/118075154