矩阵相乘遇到:operands could not be broadcast together with shapes (163,5652) (5652,1)

错误详细图
先描述一下:

  • train_x.T 是一个(163,5662) 的ndarray
  • Lost 是一个(5662, 1)的ndarray

这里我大概明白哪里错了,首先得明白(乘以*)和(矩阵相乘dot)

使用测试demo

a = np.array([[1,2],[3,4]])

结果图

1. 直接使用 * 的结果

a*a就是说直接把两个二维矩阵的每个元素进行对应相乘。
a*a结果图
要求:必须是两个维度完全相同的ndarray
比如:都是3行两列的这种才能直接使用 * 操作符
这也是为什么我自己出现上面的错误的原因了

============================================================================

2. 使用numpy.dot(a,b)

numpy.dot(a,b)才是真正意义上的矩阵相乘
先看执行结果:

numpy.dot(a,b)

numpy.dot(a,b)结果图
打个比方:结果矩阵的第一行第一个元素怎么求的呢?
就是第一个矩阵的第一行所有的元素分别乘以第二个矩阵第一列的所有元素求和
即1×1+2×3 = 7,刚好就是我们结果显示的矩阵的第一行第一个元素。

所以有些时候虽然思路是对的,但是使用的方法不对,那么带来的结果肯定是不一样的。
仅供记录学习错误,有什么大问题,希望大家留言指教,谢谢大家。
共勉!!!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐