Python 反转数组的比例

Python 反转数组的比例,python,arrays,list,numpy,Python,Arrays,List,Numpy,假设我有以下数组: x = np.array([3,7,1,2,6]) 以相反的方式获得具有其比例的阵列的最简单方法是什么?所以最小值将变为最大值,最大值将变为最小值,其他值也是如此 预期输出: array[3,1,7,6,2] 为了澄清我想要获得什么,假设我的原始序列是: y = sorted(x) #[1, 2, 3, 6, 7] 所以数组被排序了。如果是这样的话,我想要的数组是相反的数组,所以[7,6,3,2,1]。我想用我当前的输入来完成这项工作 因此,在我有最低值的地方,1现在是

假设我有以下数组:

x = np.array([3,7,1,2,6])
以相反的方式获得具有其比例的阵列的最简单方法是什么?所以最小值将变为最大值,最大值将变为最小值,其他值也是如此

预期输出:

array[3,1,7,6,2]
为了澄清我想要获得什么,假设我的原始序列是:

y = sorted(x)
#[1, 2, 3, 6, 7]
所以数组被排序了。如果是这样的话,我想要的数组是相反的数组,所以
[7,6,3,2,1]
。我想用我当前的输入来完成这项工作


因此,在我有最低值的地方,
1
现在是
7
,第二个最低值,
2
现在是
6
,依此类推。

如果输入值是唯一的:

import numpy as np

x = np.array([3, 7, 1, 2, 6])

s = sorted(x)
lookup = {v: i for v, i in zip(s, reversed(s))}

result = np.array(list(map(lookup.get, x)))

print(result)
输出

[3 1 7 6 2]
如果我理解正确,您希望按排序顺序为每个值分配相同位置的值,顺序相反。

这里有一个简单的方法:

np.sort(x)[::-1][np.argsort(np.argsort(x))]
为什么这样做:假设您的列表已经排序,那么您只需要将其反转。由于列表没有排序,我们可以先对其排序,然后将其反转,然后撤消排序

改进:我们真的只需要计算
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]

我的第一个想法是:

In [13]: xr=np.zeros_like(x)

In [14]: g=0

In [15]: f=np.unique(sorted(x))

In [16]: for b in f:
             g-=1
             #for repeated values:
             for y in np.where(x==b)[0]:
                 xr[y]=f[g]
    ...:     
In [17]: xr
Out[17]: array([3, 1, 7, 6, 2])

下面是我如何在不排序的情况下反转np数组值(最大值->最小值,最小值->最大值)

np\u arr\u inv=np\u arr*-1+np\u arr.max()
我需要保持秩序,因为这是图像数据


仅供参考Numpy有一个位反转函数

他们有一个逻辑方法来实现这一点<代码>x*-1。除此之外,我不明白这怎么会是件好事。我真的不明白你的预期产出。它与您的输入有什么关系?为什么3不变?@Bazingaa最大值
7
应该变为最小值,
1
,第二大值应该变为第二小值,
2
,依此类推,为什么用数字的相反符号不能解决这个问题。那么,如果你改变刻度,3.你是否需要在代码中对你的逻辑进行解释/添加解释?请告诉我+1.