python矩阵操作:dot、inv、det、eig

矩阵点乘

在numpy中,*号用来对矩阵进行逐元素乘积
我们熟悉的矩阵点乘,用dot函数

举个栗子:

import numpy as np
x = np.array([[1, 2], 
              [2, 3]])   # 2*2矩阵
y = np.array([[4, 5], 
              [6, 7]])   # 2*2矩阵
print(x * y)             # 逐元素相乘
# [[ 4 10]
#  [12 21]]
print(x.dot(y))          # 点乘
# [[16 19]
#  [26 31]]

注意:矩阵点乘时需要保证x的列数与y的行数相等。

另外,事情一旦牵扯到一维数组,就会变得比较奇怪。
按一贯的思维,一维数组应该是个行数为1,列数为元素个数的矩阵。
但在点乘计算时,却好像不是这样子的…`

import numpy as np
x = np.array([[1, 2, 3],
             [4, 5, 6]])   # 2*3矩阵
y = np.array([1, 2, 3])    # 一维数组
y_1 = np.array([[1],
                [2],
                [3]])      # 3*1矩阵
print(np.dot(x, y))
# [14 32]
print(np.dot(x, y_1))
# [[14]
#  [32]]

在这个栗子中,一维数组[1, 2, 3]是作为一个3*1的矩阵来操作的,而且dot函数返回了一个一维数组。

总结一下:
一个矩阵和一个长度合适的一维数组之间的矩阵乘积,结果是一个一维数组。

.

矩阵的转置、逆、行列式和特征值

numpy.linalg拥有一个矩阵分解的标准函数集。其中包含常见的求逆、行列式等操作。

  • X.T:返回X的转置
  • inv(X):返回X的逆矩阵
  • det(X):返回X的行列式
  • eig(X):返回X的特征值和特征向量

下面举个栗子:

import numpy as np
from numpy.linalg import inv,eig, det
x = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])   # 3阶方阵
trans = x.T
# [[1 4 7]
#  [2 5 8]
#  [3 6 9]]
inverse = inv(x)
# [[ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]
#  [-6.30503948e+15  1.26100790e+16 -6.30503948e+15]
#  [ 3.15251974e+15 -6.30503948e+15  3.15251974e+15]]
determinant = det(x)
# -9.51619735392994e-16
eigen_value, eigen_vector = eig(x)
# [ 1.61168440e+01 -1.11684397e+00 -9.75918483e-16]
# [[-0.23197069 -0.78583024  0.40824829]
#  [-0.52532209 -0.08675134 -0.81649658]
#  [-0.8186735   0.61232756  0.40824829]]

参考资料

《利用python进行数据分析》

发布了19 篇原创文章 · 获赞 1 · 访问量 779

猜你喜欢

转载自blog.csdn.net/weixin_43901558/article/details/104790251
eig
dot