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