根据需要附加np.newaxis

时间:2017-04-06 11:01:00

标签: python numpy slice

我想切片一个数组,以便我可以使用它来执行另一个任意维数组的操作。换句话说,我正在做以下事情:

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

1 个答案:

答案 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)

但这也不是一般情况