总结:1、np.multiply:矩阵和矩阵,数组与数组之间,横轴各对应元素相乘,因此矩阵的横轴上的元素数量要相等,或者其中一 个横轴元素数为1
2、np.matmul 第一个矩阵或数组的横轴元素与第二个矩阵或数组的纵轴元素进行对应位置相乘再求和,相乘时,对应的元素数量必须相等。
3、用 “ * ”符号对二维数组进行运算,效果等于np.multiply.-----
用 “ * ”符号对二维j矩阵进行运算,效果等于np.matmul.----
举例:
一维数组之间的相乘:
a1 = np.array(np.arange(1,8,2))
b1 = a1.reshape(2,2)
# a4 = np.array(np.random.normal(0,0.01,size=25))
#一维数组的相乘
print("a1:",a1)
print("a1.T",a1.T)
print("a1*a1==",a1*a1)
print("a1@a1==",a1@a1)
print("np.dot(a1,a1)==",np.dot(a1,a1))
print("np.matmul==",np.matmul(a1,a1))
输出结果:
a1: [1 3 5 7]
a1.T [1 3 5 7]
a1*a1== [ 1 9 25 49]
a1@a1== 84
np.dot(a1,a1)== 84
np.matmul== 84
#二维数组的相乘
b2 = np.array([[1,2,3,4],[3,4,5,6],])
print("b1:",b1)
print("b2:",b2)
print("b1.T:",b1.T)
print("b1*b1==",np.multiply(b1,b1))#二维数组相乘b1*b1 等于np.multiply(b1,b1),
print("b2*b1==",b1*b2)
print("b1*b1.T==",b1*b1.T)
print("[email protected]",[email protected])#两个矩阵点乘,矩阵1的横向维度的长度和矩阵2的纵向维度的长度相等,否则会报错!b1(1,4),b1.T(4,1)
print("np.dot(b1,b1.T)==",np.dot(b1,b1.T))
print("np.matmul==",np.matmul(b1,b1.T))
输出结果:
b1: [[1 3 5 7]]
b2: [[1 2 3 4]
[3 4 5 6]]
b1.T: [[1]
[3]
[5]
[7]]
b1*b1== [[ 1 9 25 49]]
b2*b1== [[ 1 6 15 28]
[ 3 12 25 42]]
b1*b1.T== [[ 1 3 5 7]
[ 3 9 15 21]
[ 5 15 25 35]
[ 7 21 35 49]]
[email protected] [[84]]
np.dot(b1,b1.T)== [[84]]
np.matmul== [[84]]
矩阵之间相乘
c1 = np.matrix(np.array(np.arange(1,8,2).reshape(1,4) ))
c2 = np.matrix([[1,2,3,4],[3,4,5,6],] )
print("c1:",c1)
print("c2:",c2)
print("c1.T:",c1.T)
#二维矩阵相乘c1*c1 不等于np.multiply(c1,c1),
# print("c1*c1==",c1*c1)矩阵用 "*"相乘,等于np.dot(c1,c1),因此需要横轴纵轴元素数量相等,否则报错
print("np.multiply(c1,c1)==",np.multiply(c1,c1))
print("np.multiply(c1,c1.T)==",np.multiply(c1,c1.T))
print("np.multiply(c1,c2)==",np.multiply(c1,c2))
# print("np.multiply(c1,c2.T)==",np.multiply(c1,c2.T))#报错,shape(1,4) (4,2),横轴元素数量不匹配
# print("c2*c1==",c1*c2)#同上,矩阵点乘需要横纵轴元素数量相等c1(1,N),c2(N,1)
print("c1*c2.T==",c1*c2.T)#同上,矩阵点乘需要矩阵1横轴和矩阵2纵轴元素数量相等c1(1,N),c2(N,2)
print("c1*c1.T==",c1*c1.T)
print("[email protected]",[email protected])#两个矩阵点乘,矩阵1的横向维度的长度和矩阵2的纵向维度的长度相等,否则会报错!c1(1,4),c1.T(4,1)
print("np.dot(c1,c1.T)==",np.dot(c1,c1.T))
print("np.matmul(c1,c1.T)==",np.matmul(c1,c1.T))
print("np.matmul(c1,c2.T)==",np.matmul(c1,c2.T))
# print("np.matmul(c1,c2)==",np.matmul(c1,c2))#报错,矩阵1shape(1,4),矩阵2 shape(2,4),点乘需要(y,n),(n,x)
输出结果:
c1: [[1 3 5 7]]
c2: [[1 2 3 4]
[3 4 5 6]]
c1.T: [[1]
[3]
[5]
[7]]
np.multiply(c1,c1)== [[ 1 9 25 49]]
np.multiply(c1,c1.T)== [[ 1 3 5 7]
[ 3 9 15 21]
[ 5 15 25 35]
[ 7 21 35 49]]
np.multiply(c1,c2)== [[ 1 6 15 28]
[ 3 12 25 42]]
c1*c2.T== [[50 82]]
c1*c1.T== [[84]]
[email protected] [[84]]
np.dot(c1,c1.T)== [[84]]
np.matmul(c1,c1.T)== [[84]]
np.matmul(c1,c2.T)== [[50 82]]