假设我有一个二维和一维的numpy数组
In [127]: A = np.array([[1, 2],[3, 4]])
In [128]: B = np.array([10, 100])
我想要实现的是得到一个3d数组C
,其中C[:, :, 0] = A*B[0]
和C[:, :, 1] = A*B[1]
。我可以通过np.einsum
来做,但看起来太过分了。你知道吗
In [129]: np.einsum('ij, k -> ijk', A, B)[:, :, 0]
Out[129]:
array([[10, 20],
[30, 40]])
In [130]: np.einsum('ij, k -> ijk', A, B)[:, :, 1]
Out[130]:
array([[100, 200],
[300, 400]])
有更简单的版本吗?你知道吗
要使用} ,就像这样-
B
沿第一个轴缩放,我们可以简单地使用^{为了得到
C[:, :, 0] = A*B[0] and C[:, :, 1] = A*B[1]
的等价物,我们需要扩展A
在这里没有求和的情况下,基于
broadcasting
的方法要比基于einsum
的方法快。你知道吗相关问题 更多 >
编程相关推荐