您可以使用^{}-a[np.arange(a.shape[0])[:,None], sortidxs]
样本运行-
^{pr2}$
进一步提高性能
我们可以用^{}-sortidxs = np.einsum('ijk,ijk->ij',a,a).argsort()
让我们计时并验证这个想法-In [94]: a = np.random.randint(0,9,(20,30,40))
In [95]: %timeit np.argsort(np.linalg.norm(a, axis=-1))
10000 loops, best of 3: 63.5 µs per loop
In [96]: %timeit np.einsum('ijk,ijk->ij',a,a).argsort()
10000 loops, best of 3: 19.7 µs per loop
In [97]: a = np.random.randint(0,9,(200,300,400))
In [98]: %timeit np.argsort(np.linalg.norm(a, axis=-1))
10 loops, best of 3: 88.6 ms per loop
In [99]: %timeit np.einsum('ijk,ijk->ij',a,a).argsort()
10 loops, best of 3: 22.6 ms per loop
高维数组
对于a是4D数组的附加情况,我们需要使用更多的数组来索引。在
1]对于第一个轴:在末尾使用np.arange(a.shape[0])和两个新轴。在
2]对于第二个轴:在末尾使用np.arange(a