Kri*_*ris 6 python arrays optimization numpy
我正在寻找一种以元素方式分别乘以形状(a,b)和(b,c)的两个2d数组的方法。在“ b”轴上,这是两个数组的共同点。
例如,我要广播(向量化)的示例是:
import numpy as np
# some dummy data
A = np.empty((2, 3))
B = np.empty((3, 4))
# naive implementation
C = np.vstack(np.kron(A[:, i], B[i, :]) for i in [0, 1, 2])
# this should give (3, 2, 4)
C.shape
Run Code Online (Sandbox Code Playgroud)
有人知道在这里做什么吗?有没有更好的办法?
归功于@hpaulj 的定义A和B
使用np.outer以及np.stack
A = np.arange(6).reshape((2, 3))
B = np.arange(12).reshape((3, 4))
np.stack([np.outer(A[:, i], B[i, :]) for i in range(A.shape[1])])
[[[ 0 0 0 0]
[ 0 3 6 9]]
[[ 4 5 6 7]
[16 20 24 28]]
[[16 18 20 22]
[40 45 50 55]]]
Run Code Online (Sandbox Code Playgroud)
并得到np.einsum正确的形状
np.einsum('ij, jk->jik', A, B)
[[[ 0 0 0 0]
[ 0 3 6 9]]
[[ 4 5 6 7]
[16 20 24 28]]
[[16 18 20 22]
[40 45 50 55]]]
Run Code Online (Sandbox Code Playgroud)
广播和transpose
(A[:, None] * B.T).transpose(2, 0, 1)
[[[ 0 0 0 0]
[ 0 3 6 9]]
[[ 4 5 6 7]
[16 20 24 28]]
[[16 18 20 22]
[40 45 50 55]]]
Run Code Online (Sandbox Code Playgroud)
形状是(3, 2, 4)