一尘不染

如何在numpy中反转排列数组

algorithm

给定一个自索引(不确定这是否是正确的术语)的numpy数组,例如:

a = np.array([3, 2, 0, 1])

这表示此排列=>是箭头):

0 => 3
1 => 2
2 => 0
3 => 1

我正在尝试制作一个表示逆变换的数组,而没有在python中“手动”进行,也就是说,我想要一个 纯粹的 numpy解决方案。在上述情况下,我想要的结果是:

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

相当于

0 <= 3                0 => 2
1 <= 2       or       1 => 3
2 <= 0                2 => 1
3 <= 1                3 => 0

看起来很简单,但我只是想不出该怎么做。我曾尝试使用Google搜索,但没有找到任何相关内容。


阅读 625

收藏
2020-07-28

共1个答案

一尘不染

的置换的逆pnp.arange(n)是索引的阵列s之类p的,即

p[s] == np.arange(n)

一定是真的。这样的s正是np.argsort回报:

>>> p = np.array([3, 2, 0, 1])
>>> np.argsort(p)
array([2, 3, 1, 0])
>>> p[np.argsort(p)]
array([0, 1, 2, 3])
2020-07-28