假设我有一个numpy数组,它是2D的,还有一个1D的数组。
In [127]: A = np.array([[1, 2],[3, 4]])
In [128]: B = np.array([10, 100])
我希望实现的目标是获取一个三维数组
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[:,None,None]*A
的翻译是:B[:,None,None]*A
。 - DivakarC = np.einsum('ij, k -> ijk', A, B)
已经在您的代码中使用了,您觉得如何?我怀疑A[...,None]*B
可以更快地得到与C[:, :, 0] = A*B[0] and C[:, :, 1] = A*B[1]
等效的结果。 - DivakarB[None, None, :] *A
才能等同于我的解决方案。 - math