反转数组的比例

yat*_*atu 4 python arrays numpy list

说我有以下数组:

x = np.array([3,7,1,2,6])
Run Code Online (Sandbox Code Playgroud)

以相反的方式获得具有其规模的数组的最简单方法是什么?因此,最小值将成为最大值,最大值将变为最小值,依此类推其余值.

预期产量:

array[3,1,7,6,2]
Run Code Online (Sandbox Code Playgroud)

为了澄清我想要获得的内容,请说我的原始序列是:

y = sorted(x)
#[1, 2, 3, 6, 7]
Run Code Online (Sandbox Code Playgroud)

所以数组排序了.如果是这种情况,我想要的数组是反转的数组,所以[7, 6, 3, 2, 1].我想用我目前的输入完成这个.

因此,在我具有最低值的地方,1现在是a 7,第二低的vaule,2现在是a 6,依此类推.

tch*_*tch 5

这是一种麻木的方法:

np.sort(x)[::-1][np.argsort(np.argsort(x))]
Run Code Online (Sandbox Code Playgroud)

为什么这样有效:假设您的列表已经排序,那么您只需要反转它。由于列表未排序,我们可以先对其进行排序,然后将其反转,然后撤消我们的排序。

改进:我们真的只需要计算argsort一次。然后x可以用这个列表排序,我们可以计算逆排列,argsort(x)而不需要另一种排序。

ax = np.argsort(x)
aax = np.zeros(len(ax),dtype='int')
aax[ax] = np.arange(len(ax),dtype='int')

x[ax[::-1]][aax]
Run Code Online (Sandbox Code Playgroud)