在使用numpy的时候,因为numpy 的广播机制,所以很多计算都是可以算的,不会报错,这个实际上给我们使用numpy带来了隐患,因为我们不知道根本没有意识到自己是不是算错了,根本没有办法知道输出了什么xx玩意儿,… 所以用numpy敲代码,一定要规范。
##############向量 np.array:
name pthon函数或者简略符号
数乘 *
(点乘 内积 数量基) @ np.dot(x,y) (只是np.array 的时候,才可以用 @ 重载运算符 得到 实现np.dot) 手写: (中间的一个小点)
(差乘 向量积 矢量基 外积) np.cross(x,y) 手写:X
(Outer product ) np.outer 手写的:⊗ (这个不是外积,不要搞混!)
(Kronecker product ) np.kron()
array 更加常用一点
##############矩阵 np.matrix:
name pthon函数或者简略符号
(数乘) *
(相乘) @ np.dot (书上的矩阵相乘 是没有符号的)
(转置): a.T
############尤其对于方阵:
求逆矩阵 ( inverse matrix )
from numpy.linalg import inv as inv
a_inv = inv(a)
求特征值和特征向量:
eigenvalue,featurevector=np.linalg.eig(matrix)
ps:featurevector 会得到一个矩阵、其中的列向量按照特征值的顺序排列。但是里面的数字非常复杂、得到的没有什么实际意义。
############尤其对于实对称矩阵,实对称矩阵一定可以对角相似于对角上的元素为其特征值的对角矩阵。此时featurevector为正交阵。比如看下面例子:
A=np.array([[1,1,-2],
[1,-2,1],
[-2,1,1]])
eigenvalue,featurevector=np.linalg.eig(A)
#得到:
np.round(eigenvalue)=array([ 3., 0., -3.])
_A=np.round(inv(featurevector)@A@(featurevector))
#得到:
_A=array([[ 3., 0., 0.],
[-0., 0., -0.],
[-0., 0., -3.]])
############其他:
1.逆矩阵和矩阵相乘得到单位矩阵E
inv(a) @ a
array([[ 1.00000000e+00, 1.11022302e-16],
[-1.11022302e-16, 1.00000000e+00]])
np.round(inv(a) @ a) #四舍五入
array([[ 1., 0.],
[-0., 1.]])