关于Numpy一维与二维数组相乘结果不符的疑问
问题原因解析
这是numpy广播机制导致的结果,核心是数组维度的匹配规则:
- 先明确两个数组的形状:
a = np.array([1,2,3])的形状是(3,),属于一维数组b = np.array([[1]])的形状是(1,1),属于二维数组
numpy执行元素级乘法时,会从最后一个维度开始对齐;如果维度数不一致,会自动给低维数组补前导维度。这里a会被自动扩展为形状 (1,3) 的二维数组,而b的第二个维度是1,会被扩展成和a对应维度一致的3——也就是b变成形状 (1,3)、元素全为1的数组。
两者对应元素相乘后,结果就是形状 (1,3) 的数组 [[1,2,3]]。
如果想得到预期的 [[1],[2],[3]](形状 (3,1)),只需把a改成列向量形式,比如:
a = np.array([1,2,3]).reshape(3,1) result = a * b
此时a的形状是 (3,1),b的形状 (1,1) 会被扩展为 (3,1),相乘后就能得到你想要的结果。
内容的提问来源于stack exchange,提问作者Ujjawal Bindal
相关产品推荐
相关产品推荐

