如果已经多次回答,我很抱歉,但我找不到解决办法。
假设以下代码:
import numpy as np
A,_,_ = np.meshgrid(np.arange(5),np.arange(7),np.arange(10))
B = (rand(7,10)*5).astype(int)
如何使用A
对B
进行切片,以便B
代表A
的第一个和最后一个维度中的索引(即A[magic] = B
)?< / p>
我试过了
A[:,B,:]
由于高级索引的特殊性而无法正常工作。 A[:,B,np.arange(10)]
生成7个我之后的矩阵A[np.arange(7),B,np.arange(10)]
给出错误:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
还有其他建议吗?
答案 0 :(得分:0)
这两种方法都有效:
A[0, B, 0]
A[B, B, B]
实际上,只有轴B
中的1
很重要,其他范围可以是广播到B.shape
且受A.shape[0]
限制的任何范围(对于轴{{ 1}})和1
(对于轴A.shape[2]
),这是一个荒谬的例子:
2
但你不想使用A[range(7) + range(3), B, range(9,-1, -1)]
,因为那样你就可以得到:
或7
(或两者!)阵列的“副本”你想。
10