numpy中的线性代数
矩阵积
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
print(np.vdot(a,b)) # vdot() 矩阵点积
# 矩阵点积计算:对应元素乘积之和,如例结果为:1*5+2*6+3*7+4*8
print(np.inner(a,b)) # inner() 矩阵内积
"""
矩阵内积计算:对于一维数组内积就是对应元素乘积之和
对于多维数组,则在最后一个轴上的元素对应乘积和
如例:a = [[a1,a2],[b1,b2]] b = [[c1,c2],[d1,d2]]
内积结果为:c = [[a1c1+a2c2, a1d1+a2d2],[b1c1+b2c2, b1d1+b2d2]]
"""
print(np.dot(a,b)) # dot() 矩阵乘积
""""
矩阵乘积:对于一维数组就是对应元素之和
对于多维数组,则是第一个数组的最后一轴上的所有元素与第二个数组的倒数第二维的元素乘积和
如例二维数组:a = [[a1,a2],[b1,b2]] , b = [[c1,c2],[d1,d2]]
结果为:c = [[a1c1+a2d1, a1c2+a2d2],[b1c1+b2d1, b1c2+b2d2]]
如例三维数组:a = [[[a1,a2,a3],[b1,b2,b3]],[[aa1,aa2,aa3],[bb1,bb2,bb3]]]
b = [[[c1,c2],[d1,d2],[e1,e2]],[[cc1,cc2],[dd1,dd2],[ee1,ee2]]]
结果为:c = [[[[a1c1+a2d1+a3e1, a1c2+a2d2+a3e2],[a1cc1+a2dd1+a3ee1, a1cc2+a2dd2+a3ee2]]
[[b1c1+b2d1+b3e1, b1c2+b2d2+b3e2],[b1cc1+b2dd1+b3ee1, b1cc2+b2dd2+b3ee2]]]
[[[aa1c1+aa2d1+aa3e1, aa1c2+aa2d2+aa3e2],[aa1cc1+aa2dd1+aa3ee1, aa1cc2+aa2dd2+aa3ee2]]
[[bb1c1+bb2d1+bb3e1, bb1c2+bb2d2+bb3e2],[bb1cc1+bb2dd1+bb3ee1, bb1cc2+bb2dd2+bb3ee2]]]]
对于dot来说多维数组都是第一个数组最后一维的每一行和第二维数组倒数第二维的每一列乘积和
"""
print(np.matmul(a,b)) # matmul() 矩阵乘积
"""
matmul:对于都是一维数组情况下,就是两数组对应元素乘积之和
对于其中一个数组是一维情况下,这个一维数组会被广播,但结果会再将这个维度去除
如例:a = [[a,b,c],[d,e,f]] b = [x,y,z]
结果为:c = [ax+by+cz, dx+ey+fz]
相当于将第一个数组的每一行和第二个一维数组的每个元素的乘积之和
对于都是二维数组则结果和 dot()矩阵乘积一样,都每一行于每一列的乘积和
如果是二维以上,则和dot不同
如例三维情况:a = [[[a1,a2,a3],[b1,b2,b3]],[[aa1,aa2,aa3],[bb1,bb2,bb3]]]
b = [[[c1,c2],[d1,d2],[e1,e2]],[[cc1,cc2],[dd1,dd2],[ee1,ee2]]]
结果为:c = [[[a1c1+a2d1+a3e1, a1c2+a2d2+a3e2],[b1c1+b2d1+b3e1, b1c2+b2d2+b3e2]]
[[aa1cc1+aa2dd1+aa3ee1, aa1cc2+aa2dd2+aa3ee2],[bb1cc1+bb2dd1+bb3ee1, bb1cc2+bb2dd2+bb3ee2]]]
和dot不同,matmul是将最后两维作为向量乘积
"""
print('=============================')
c = np.array([[1,2,3],[11,22,33]])
d = np.array([4,5,6])
print(np.matmul(c,d))
行列式
print(np.linalg.det(a)) # linalg.det() 矩阵的行列式
"""
矩阵的行列式是将方阵对角乘积差,它必须要求矩阵最后两维是方阵,较大的方阵都看成2×2的方阵组合
一个矩阵A = [[a,b],[c,d]] ,行列式计算:ad-bc
对于3阶行列式,也可以适用对角线方法计算
多阶行列式,可使用行列展开的方法求值,也可以用三角方法求值
多阶行列式行列展开计算方法:
余子式,代余子式:
n阶行列式中去掉某个元素所在的行列,剩下的行列式称为这个元素的余子式
代余子式是余子式的(-1)的i+j次方,i,j是下标
①一个n阶行列式,取出第一行,
②然后再将第一行的第一个元素取出,乘以它的余子式
③之后再将第一行的第二个元素取出,乘以它的余子式
④再将第一行的第三个元素取出,乘以余子式
依次类推,一直将第一行的最后一个元素取出
最后以 ②-③+④-⑤+⑥ 这种结果减,加,减,加的方式得到最终的值
PS:初始可以任意选取第几行第几列作为基准行列
如果选取的是奇数行列则结果就是n阶行列式的值
如果选取的是偶数行列则结果 * -1 是n阶行列式的值
"""