Arrays numpy中沿多维索引排序

Arrays numpy中沿多维索引排序,arrays,numpy,Arrays,Numpy,我有一个三维数组,需要排序。我还有一个二维索引,是我用lexsort得到的,我想用它来排序。我找不到如何将索引应用于数组而不出现额外维度 将numpy导入为np a=np.array([ [ [1, 1, 1], [0, 1, 2], [3, 1, 1], [-1, 1, 1], [0, 2, 2], [1, 2, 2], ],[ [-1, 1, 1], [0, 1, 2], [-3, 1, 1], [1, 1, 1], [0, -2, 2], [-1, -2, 2], ],[ [-1, 1,

我有一个三维数组,需要排序。我还有一个二维索引,是我用
lexsort
得到的,我想用它来排序。我找不到如何将索引应用于数组而不出现额外维度

将numpy导入为np
a=np.array([
[
[1, 1, 1],
[0, 1, 2],
[3, 1, 1],
[-1, 1, 1],
[0, 2, 2],
[1, 2, 2],
],[
[-1, 1, 1],
[0, 1, 2],
[-3, 1, 1],
[1, 1, 1],
[0, -2, 2],
[-1, -2, 2],
],[
[-1, 1, 1],
[-0, 1, -2],
[-3, 1, 1],
[1, 1, 1],
[-0, -2, -2],
[-1, -2, -2],
],
])
排序的索引=np.lexsort((a[:,:,0],a[:,:,1],a[:,:,2]),轴=1)
排序后的索引为

[[3 0 2 1 4 5],[2 0 3 5 4 1],[5 4 1 2 0 3]]
最终结果应该是

a_sorted=np.array([
[
[-1, 1, 1],
[1, 1, 1],
[3, 1, 1],
[0, 1, 2],
[0, 2, 2],
[1, 2, 2],
],[
[-3, 1, 1],
[-1, 1, 1],
[1, 1, 1],
[-1, -2, 2],
[0, -2, 2],
[0, 1, 2],
],[
[-1, -2, -2],
[0, -2, -2],
[0, 1, -2],  
[-3, 1, 1],
[-1, 1, 1],
[1, 1, 1],
],
])
我试过了

a[已排序的索引]
a[已排序的索引:]
a[:,排序的索引]

我正要循环这件事,但我想把它做好。

你可以使用
np。沿着轴走

np.take_along_axis(a,sorted_index[...,None],axis=1)
输出是

array([[[-1,  1,  1],
        [ 1,  1,  1],
        [ 3,  1,  1],
        [ 0,  1,  2],
        [ 0,  2,  2],
        [ 1,  2,  2]],

       [[-3,  1,  1],
        [-1,  1,  1],
        [ 1,  1,  1],
        [-1, -2,  2],
        [ 0, -2,  2],
        [ 0,  1,  2]],

       [[-1, -2, -2],
        [ 0, -2, -2],
        [ 0,  1, -2],
        [-3,  1,  1],
        [-1,  1,  1],
        [ 1,  1,  1]]])

当然我犯了一个错误。。。我稍后会更正它,以免混淆在这里着陆的人:D