线性代数(如矩阵乘法、行列式等)是数学运算中的一个重要工具,在图像信号处理,音频信号处理中起到非常重要的作用。NumPy与MATLAB不同的是,通过*得到的是二维数组的元素级的积,而不是一个矩阵点积。
numpy.linalg中有一组标准的矩阵分解运算以及诸如逆和行列式之类的东西。下面以矩阵相乘和矩阵求逆作为例子
a=[1,5,7,9,4,3,1,7,3]
b=[4,46,456,748,54,2,4,4,16]
na=numpy.array(a).reshape((3,3))
nb=numpy.array(b).reshape((3,3))
print na
print nb
result=numpy.dot(na,nb)
print result
得到结果
[[1 5 7]
[9 4 3]
[1 7 3]]
[[ 4 46 456]
[748 54 2]
[ 4 4 16]]
[[3772 344 578]
[3040 642 4160]
[5252 436 518]]
求逆代码如下
print numpy.linalg.inv(na)
得到结果
[[-0.03169014 0.11971831 -0.04577465]
[-0.08450704 -0.01408451 0.21126761]
[ 0.20774648 -0.00704225 -0.1443662 ]]
下面总结一下numpy.linalg中的常用函数
diag 以一维数组的形式返回方阵的对角线元素
dot 矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eig 计算方阵的本征值和本征向量
inv 计算方阵的逆
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算qr分解
svd 计算奇异值分解
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解