我正在使用numpy,并且想要使用类似于np.argsort的东西来沿着数组“ array0”中的轴查找k个最大值的索引。
但是我想引入一个阈值(或迟滞),以使排序变得不那么嘈杂。
rand = np.random.random(size=(128,20))
slope = np.tile(((np.arange(20)+1)/20)[None,...],reps=(128,1))
array_0 = rand*slope
idx_sorted0 = np.argsort(array_0,axis=1) # <--- regular 'noisy' sorting
这是常规的“嘈杂”排序。我想沿着轴a(= 128)并仅在轴b(= 20)的排序索引中引入更改,如果索引b在a = i处的值大于阈值(例如,大于1.5倍,索引b在a = i-1处的值)。
使用两个for循环,我可能会创建一个非常慢的方法来迭代遍历数据并将每个索引与之前的索引进行比较。但是,考虑到数据的大小,这是不切实际的,我相信有一种使用矢量运算或已经存在的Numpy方法的解决方案。 任何帮助将不胜感激!
这是我的示例输出。我有一个未排序的数组a(右边的索引):
[[0, 8, 3], 000
[1, 4, 6], 111
[8, 6, 4], 222
[3, 1, 9], 333
[4, 6, 2]] 444
定期排序会给出以下信息:
[[0, 1, 2], 034
[1, 4, 3], 110
[3, 6, 4], 322
[4, 6, 6], 441
[8, 8, 9]] 203
现在,如果右侧的值比左侧的值大1.5倍,我只想更改一个索引(从左到右):
[[0, 1, 2], 034
[1, 4, 4], 112
[3, 8, 3], 300
[4, 6, 6], 441
[8, 6, 9]] 223
这将产生不完美的排序,但不会频繁地移动索引。我希望我说清楚。抱歉,stackoverflow有点新了。