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,依此类推.
这是一种麻木的方法:
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)