Python numpy实现B数组各元素分别乘A数组 解决广播维度报错
报错原因
numpy 广播运算要求参与运算的数组维度从尾端对齐时,对应维度的长度要么相等,要么其中一方为1。当前代码中B的形状是(2,),A的形状是(3,3),尾端维度2和3长度不匹配,无法直接广播,因此抛出维度不兼容的错误。
正确实现
要实现「B的每个元素分别乘以整个A矩阵」的需求,只需要把B的形状调整为(2,1,1),给它补充两个长度为1的维度,即可满足广播规则,运算后会得到形状为(2,3,3)的数组,正好对应2个3×3二维矩阵的预期结构。
完整可运行代码:
import numpy as np A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) t = np.linspace(0, 1, 2) B = 0.02109 * np.exp(-t) # 为B新增两个长度为1的维度,适配广播规则 P = B[:, np.newaxis, np.newaxis] * A print(P)
运行后输出结果和预期完全一致:
[[[0.02109 0.04218 0.06327 ] [0.08436 0.10545 0.12654 ] [0.14763 0.16872 0.18981 ]] [[0.00775858 0.01551716 0.02327574] [0.03103432 0.0387929 0.04655148] [0.05431006 0.06206864 0.06982722]]]
- 补充说明:代码里的
np.newaxis可以替换为None,写法更简洁,即B[:, None, None] * A,效果完全相同;也可以用B.reshape(-1, 1, 1)实现同样的维度调整。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

