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是将最后两维作为向量乘积,就是将0轴的对应位置的元素矩阵乘积
"""
print('=============================')
c = np.array([[1,2,3],[11,22,33]])
d = np.array([4,5,6])
print(np.matmul(c,d))

      

猜你喜欢

转载自www.cnblogs.com/saber9/p/12174050.html