【发布时间】:2015-08-24 18:26:48
【问题描述】:
我有一个 numpy 数组 A,其形状为 (10,)。
截至目前,我还有一个形状为 (10,3,5) 的 numpy 数组 B。我想在这两者之间做乘法得到 C 使得 C[0,:,:]=A[0]*B[0,:,:], C[1]=A[1]*B[1 ,:,:] 等。
我不想用循环来解决这个问题,一个原因是事物的美感,另一个原因是这段代码需要非常通用。只要前导维度为 10,我希望用户能够输入几乎任何形状的 B。例如,我希望用户也能够输入形状为 (10,4) 的 B。
那么:如何使用 numpy 实现这种乘法?谢谢。
附录:例如已被询问。会变小。假设 A 是 numpy 数组 [1,2,3],B 是 numpy 数组 [[1,2],[4,5],[7,8]]。我希望两者相乘得到 [[1,2],[8,10],[21,24]]。 ...
>>> a
array([1, 2, 3])
>>> b
array([[1, 2],
[4, 5],
[7, 8]])
>>> #result
>>> c
array([[ 1, 2],
[ 8, 10],
[21, 24]])
>>>
【问题讨论】:
-
请包含 small 示例数组和预期输出。
-
如果
B是(3,5,10),则A*B有效。numpy会根据需要在开头自动添加维度(MATLAB 在末尾添加维度)。 -
如上所述,广播对离开数组最右边的维度。这意味着
(A*B.T).T将匹配长度为 10 的乘法运算,这将是一个通用解决方案,但我认为 DSM 建议的einsum方法可以说更好。
标签: python arrays numpy multiplication