【发布时间】:2020-04-24 17:33:54
【问题描述】:
我有一个形状为 (100,3) 的 numpy 数组 X 和一个形状为 (100,) 的 numpy 数组 sub_res。如何将 sub_res 元素与 X 相乘,以便得到结果形状 (100,3)?我想避免循环使用。
【问题讨论】:
标签: python numpy numpy-ndarray array-broadcasting
我有一个形状为 (100,3) 的 numpy 数组 X 和一个形状为 (100,) 的 numpy 数组 sub_res。如何将 sub_res 元素与 X 相乘,以便得到结果形状 (100,3)?我想避免循环使用。
【问题讨论】:
标签: python numpy numpy-ndarray array-broadcasting
您可以转置 X,然后使用 numpy.dot 将其乘以 sub_res,最后转置最终结果。
【讨论】:
制作两个数组:
In [236]: X = np.ones((10,3)); sub=np.ones((10,))
使用None(或np.newaxis)进行索引会更改sub 的形状。 sub.reshape(10,1) 也可以。
In [237]: sub[:,None].shape
Out[237]: (10, 1)
通过broadcasting,我们可以将 (N,3) 与 (N,1) 相乘以产生 (N,3):
In [238]: (sub[:,None]*X).shape
Out[238]: (10, 3)
许多人需要(重新)阅读一些numpy 基础知识,重点关注broadcasting。
https://numpy.org/doc/stable/user/quickstart.html#broadcasting-rules
【讨论】: