如何排序未排序:array(1).array(2)的sort转换-> array(3).unsort(反向array(1).sort [英] How to sort unsort: array(1).sort transform of array(2) -> array(3).unsort (reversed array(1).sort

查看:95
本文介绍了如何排序未排序:array(1).array(2)的sort转换-> array(3).unsort(反向array(1).sort的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您如何对结果进行排序,操作,然后再将其取消排序?

How do you sort, operate on, and then unsort the result?

假设我有一个浮点数组p1 = 0.15,0.3, 0.25, 0.12, ....它被分类为:p2 = sort(p1).一个功能(使用p2作为输入的操作)会导致p3:p3 = f(p2, x, y, ...)对于某些功能f.

Assume I have a float array p1 = 0.15,0.3, 0.25, 0.12, .... It is sorted to: p2 = sort(p1). A function (operation with p2 as input) results in p3: p3 = f(p2, x, y, ...) for some function f.

如何以最聪明的方式对p3进行排序? (与p1排序方式相反)

How can I unsort p3 in the smartest way? (reverse of how p1 was sorted)

即:p4 = unsort(p3)<-p4未按与p1相同的顺序排序,以便与p1进行比较(x绘图)?

i.e: p4 = unsort(p3) <- p4 unsorted to same order as p1, for comparison (x-plot) with p1?

推荐答案

您需要在此处使用双精度argsort来保持顺序:

You need a double argsort here to keep the order:

In [6]: a
Out[6]: array([5, 4, 8, 3, 6, 1, 2, 4, 9, 6])

In [7]: b=sort(a)

In [8]: b
Out[8]: array([1, 2, 3, 4, 4, 5, 6, 6, 8, 9])

In [9]: ii=a.argsort().argsort()

In [10]: c=b*b

In [11]: c
Out[11]: array([ 1,  4,  9, 16, 16, 25, 36, 36, 64, 81])

In [12]: c[ii]
Out[12]: array([25, 16, 64,  9, 36,  1,  4, 16, 81, 36])

这篇关于如何排序未排序:array(1).array(2)的sort转换-> array(3).unsort(反向array(1).sort的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆