我想切片一个数组,以便我可以使用它来执行另一个任意维数组的操作。换句话说,我正在做以下事情:
A = np.random.rand(5)
B = np.random.rand(5,2,3,4)
slicer = [slice(None)] + [None]*(len(B.shape)-1)
result = B*A[slicer]
是否有一些我可以使用的语法,因此我不必构建slicer
?
答案 0 :(得分:3)
在这种特定情况下,您可以将np.einsum
与省略号一起使用。
result2 = np.einsum('i,i...->i...', A, B)
np.allclose(result, result2)
Out[232]: True
虽然@hpaulj指出这只适用于乘法(或使用1/B
时除法)。
由于广播通常来自另一端,您可以使用np.transpose
两次以正确的顺序获取轴。
result3 = np.transpose(np.transpose(B) * A)
但这也不是一般情况