Python 撤消多维numpy数组沿特定轴的排序

Python 撤消多维numpy数组沿特定轴的排序,python,numpy,sorting,multidimensional-array,Python,Numpy,Sorting,Multidimensional Array,我正在沿着一个轴对一个大的多维numpy数组进行排序。 经过一些计算后,我想撤销排序,其值本身与我进行初始排序时的值不同 起初,我只是简单地反转排序索引,但是如果数组在一开始就已经正确排序,那么这当然没有任何意义,请参见下面的代码 将numpy导入为np 数组=np.random.rand(100,2,4) array.out=数组 arg=array.argsort(轴=1) arg_rev=arg.argsort(轴=1) #此解决方案基于https://github.com/numpy/n

我正在沿着一个轴对一个大的多维numpy数组进行排序。 经过一些计算后,我想撤销排序,其值本身与我进行初始排序时的值不同

起初,我只是简单地反转排序索引,但是如果数组在一开始就已经正确排序,那么这当然没有任何意义,请参见下面的代码

将numpy导入为np
数组=np.random.rand(100,2,4)
array.out=数组
arg=array.argsort(轴=1)
arg_rev=arg.argsort(轴=1)
#此解决方案基于https://github.com/numpy/numpy/issues/4724
对于范围(0,array.shape[2])中的i:
tmp=数组[:,:,i]
array.out[:,:,i]=tmp[np.arange(np.shape(tmp)[0])[:,np.newaxis],arg_ftc_rev[:,:,i]]
我想将此解决方案与来自的解决方案结合起来,而不必循环附加的数组索引

(a=np.random.randint(0,10,10) #aa=np.argsort(a) #aaa=np.argsort(aa)) #例如。 array.out[:,:,i]=tmp[np.arange(np.shape(tmp)[0])[:,np.newaxis],arg_ftc[:,:,i][arg_ftc_rev[:,:,i]] 但这不起作用,因为它会导致错误的形状。

这是一个愚蠢的错误

array.out[:,:,i]=tmp[np.arange(np.shape(tmp)[0])[:,np.newaxis],arg_ftc[:,:,i][arg_ftc_rev[:,:,i]

需要


array.out[:,:,i]=tmp[np.arange(np.shape(tmp)[0])[:,np.newaxis],[arg_ftc_rev[:,:,i]]

“更改值后撤消排序”是一个非常模糊的概念。您能否提供一个示例(附数据)您想完成什么?使用结尾处的
inverse\u permutation
函数来反转argsort的结果。@jdehesa我尝试了
python导入numpy作为np array=np.random.rand(100,2,4)arg=array.argsort(axis=1)x=inverse\u permutation(arg)
但有一个错误,因为它无法广播。@ScottHunter我的意思是,每个元素在排序轴上的位置应该与开始时一样,但是这些元素中的值将被修改。因此,简单地再次排序是没有选项的,例如
python x=[1,3,1,6]x=sort(x)#[1,1,3,6]x=x*2#[2,2,6,12]#撤消排序#[2,6,2,12]