2024-04-19 04:03:40 发布
网友
我想对一个数组进行切片,这样我就可以用它对另一个任意维的数组执行操作。换句话说,我正在做以下工作:
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?你知道吗
slicer
在这种特殊情况下,您可以将np.einsum与省略号一起使用。你知道吗
np.einsum
result2 = np.einsum('i,i...->i...', A, B) np.allclose(result, result2) Out[232]: True
尽管如此,正如@hpaulj所指出的,这只适用于乘法(或者除法,如果您使用1/B)。你知道吗
1/B
由于广播通常从另一端进行,因此可以使用np.transpose两次以正确的顺序获取轴。你知道吗
np.transpose
result3 = np.transpose(np.transpose(B) * A)
但这也不是一般情况
在这种特殊情况下,您可以将
np.einsum
与省略号一起使用。你知道吗尽管如此,正如@hpaulj所指出的,这只适用于乘法(或者除法,如果您使用
1/B
)。你知道吗由于广播通常从另一端进行,因此可以使用
np.transpose
两次以正确的顺序获取轴。你知道吗但这也不是一般情况
相关问题 更多 >
编程相关推荐