给定一个自索引(不确定这是否是正确的术语)的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搜索,但没有找到任何相关内容。
的置换的逆p的np.arange(n)是索引的阵列s之类p的,即
p
np.arange(n)
s
p[s] == np.arange(n)
一定是真的。这样的s正是np.argsort回报:
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])