3 NumPy库实现矩阵运算

3.1 矩阵基本运算一(矩阵加法、矩阵减法、矩阵数乘)

直接上例子吧

import numpy as np
print("生成两个矩阵")
a = np.arange(1, 11).reshape(2, 5)
b = np.arange(100, 110).reshape(2, 5)
print(a)
print(b)
print("矩阵相加:")
print(a + b)
print("矩阵相减:")
print(b - a)
print("矩阵相乘:")
print(10 * a)
"""
结果为:
生成两个矩阵
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
[[100 101 102 103 104]
 [105 106 107 108 109]]
矩阵相加:
[[101 103 105 107 109]
 [111 113 115 117 119]]
矩阵相减:
[[99 99 99 99 99]
 [99 99 99 99 99]]
矩阵相乘:
[[ 10  20  30  40  50]
 [ 60  70  80  90 100]]
"""

3.2 矩阵的基本运算二(矩阵相乘、逆矩阵、矩阵的特征值和特征向量)

3.2.1 矩阵相乘

矩阵相乘要满足左边的矩阵列数等于右边矩阵的行数。在NumPy库中,可以采用两种方式实现矩阵相乘。设A * B,则代码表示为:

  • A.dot(B)
  • np.dot(A, B)
import numpy as np
print("生成两个矩阵")
a1 = np.arange(1, 11).reshape(2, 5)
b1 = np.arange(12, 27).reshape(5, 3)
print(a1)
print(b1)
print("矩阵相乘方法一")
print(a1.dot(b1))
print("矩阵相乘方法二")
print(np.dot(a1, b1))
"""
结果为:
生成两个矩阵
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]]
[[12 13 14]
 [15 16 17]
 [18 19 20]
 [21 22 23]
 [24 25 26]]
矩阵相乘方法一
[[300 315 330]
 [750 790 830]]
矩阵相乘方法二
[[300 315 330]
 [750 790 830]]
"""

3.2.2 逆矩阵

求矩阵的逆有两种方式:设求矩阵A(A为非奇异矩阵(非奇异矩阵是行列式不为 0 的矩阵,也就是可逆矩阵))

  • np.linalg.inv(A):相当于MATLAB中的inv()函数
  • .I:.I方法更方便
import numpy as np
a2 = np.array([[1, 2], [3, 4]])
print("逆矩阵方法一")
print(np.linalg.inv(a2))
print("逆矩阵方法二")
A = np.matrix(a2)
print(A.I)
"""
结果为:
逆矩阵方法一
[[-2.   1. ]
 [ 1.5 -0.5]]
逆矩阵方法二
[[-2.   1. ]
 [ 1.5 -0.5]]
"""

3.2.3 矩阵的行列式

利用np.linalg.det(A),A为方阵。利用np.linalg.det(A)求出来的值是浮点数,如果想得到整数需要使用int强转。

import numpy as np
a3 = np.array([[1, 2], [3, 4]])
print(int(np.linalg.det(a3)))  # 结果为:-2

3.2.4 矩阵特征值和特征向量

利用np.linalg.eig(A),利用3.2.2小节的例子

import numpy as np
a2 = np.array([[1, 2], [3, 4]])
A = np.matrix(a2)
print("求矩阵的特征值和特征向量")
eigenvalue, featurevector = np.linalg.eig(A)
print("矩阵的特征值:", end='')
print(eigenvalue)
print("矩阵的特征向量:", end='')
print(featurevector)
"""
结果为:
求矩阵的特征值和特征向量
矩阵的特征值:[-0.37228132  5.37228132]
矩阵的特征向量:[[-0.82456484 -0.41597356]
 [ 0.56576746 -0.90937671]]
"""

从Pyzhebzthon数据分析从小白到专家_百度百科这本书上学到的知识! 

你可能感兴趣的:(Python杂记,numpy,python)