追加np.newaxis公司根据需要

2024-04-19 04:03:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对一个数组进行切片,这样我就可以用它对另一个任意维的数组执行操作。换句话说,我正在做以下工作:

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?你知道吗


Tags: nonelennp语法切片slicerandom数组
1条回答
网友
1楼 · 发布于 2024-04-19 04:03:40

在这种特殊情况下,您可以将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)

但这也不是一般情况

相关问题 更多 >