1
我试图找到沿着特定轴(0)为3D ndarray的最大值的指数,然后使用这些指数切出这些值(和来自第二个平行阵列的对应值)。例如,切片提取沿轴的最大值,在一个ndarray
> a = np.random.randint(10, 100, 24).reshape(2, 3, 4)
> print(a)
array([[[94, 22, 96, 44],
[11, 85, 39, 85],
[58, 43, 48, 84]],
[[84, 58, 51, 30],
[74, 89, 90, 11],
[90, 54, 94, 20]]])
现在,我很感兴趣,这给那些在零轴的最大的值的指数,即
> a[inds]
array([[94, 58, 96, 44],
[74, 89, 90, 85,],
[90, 54, 94, 84,]])
使用a.argmax()
给出了零轴指数是最大,即
> a.argmax(axis=0)
array([[0, 1, 0, 0],
[1, 1, 1, 0],
[1, 1, 1, 0]])
但是这不会对切片工作...
非常感谢!我需要在我的高级索引中刷新(很多)......但是有一个简单的理由说明为什么第三个轴('np.arange(a.shape [2])')的索引不需要广播到一个额外的维度(即'np.arange(a.shape [2])[:,None]')? – DilithiumMatrix
@DithithiumMatrix Nah,我们不需要。这就是为什么在'explicit-way'中显示'np.arange(a.shape [2])'的原因。但是使用一个额外的暗淡,如:np.ogrid(前面显示),我们有np.arange(a.shape [2])[None]也不会伤害。 – Divakar
@DilithiumMatrix'inds'会有'(m,n)'的变暗。我们需要扩展'np.arange(m)',因为它沿着'inds'的第一个轴,而'np.arange(n)'沿着'inds'的第二个轴。所以,我们需要扩展第一个范围数组而不是第二个,因为第二个索引时会自动沿'inds'的第一个轴延伸。 – Divakar