numpy中dot与*的区别

本文通过具体实例对比了numpy中矩阵相乘dot与元素级相乘*的区别。dot适用于矩阵相乘,仅需满足前一个矩阵的列数等于后一个矩阵的行数;而*则遵循广播机制,要求两个矩阵的形状完全一致。
dot是矩阵相乘,只要矩阵满足前一个矩阵的列与后一个矩阵的行相匹配即可
*是遵循numpy中的广播机制,必须保证行列相对应才可以进行运算

先看一则正例

>>import numpy as np
#test1与test2行列相同
>>test1 = np.array([[1,2],[3,4]])
>>test2 = np.array([[3,3],[2,2]])
>>test1 * test2
array([[3, 6],
       [6, 8]])
>>np.dot(test1,test2)
array([[ 7,  7],
       [17, 17]])

再看一则反例

#test3与test4行列数不相同
>>test3 = np.array([[1,2],[2,3]])
>>test4 = np.array([[2,3,4],[4,5,6]])
>>test3*test4
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,2) (2,3) 
>>np.dot(test3,test4)
array([[10, 13, 16],
       [16, 21, 26]])

很明显,错误信息是由于test3中的(2,2)与test4(2,3)行列不匹配,故不可以进行*运算,而dot则可以因为test3中的列2 = test4中的行2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值