2015-02-10 76 views
0

我有一个2560x2048的浮点值数组,我需要25%和75%的百分点值。 (5,242,880)作为一维载体。我的第一个想法是使用双向排序并获取25%和75%的值。但是我所用的Bitonic类型是2个阵列的功率,我不想用假人去更大的阵列。数组的百分数(在CUDA中)没有排序?

这让我想到,也许有人有一种方法可以在没有完整排序的情况下获得百分位数?

+0

在性能方面,精心编写的排序代码和平均排序代码之间的差异可能相当大。在没有应用最好的忍者努力的情况下,用一种不太理想的选择算法来挣扎,可能是一个性能较差的选择,而不是简单地用最快的可用排序。在理论上排序需要更多的工作,但它有相当多的努力(例如[cub](http://nvlabs.github.io/cub/index.html))。无论如何,我认为你的“重新要求是一种选择算法,如[this one](http://code.google.com/p/ggks/)。 – 2015-02-10 23:06:38

+0

是的,我正在寻找的是iqr,四分位数范围,选择算法会更快更简单地进行编码? – 2015-02-10 23:21:01

+0

忘记排序和cuda,但建立直方图会更容易理解您的问题。 – 2015-02-11 17:13:18

回答

0

Tae-Sung Shin是正确的。直方图的百分位数是实现这一点的最佳方法。

1

我知道你问的是非排序方法,但Thrust确实提供了排序功能。我还没有尝试过,但如果它是cuFFT之类的东西,我预计它会被高度优化。

根据this link,您还可以使用CUB进行排序,这显然比推力更快。

另一种选择是从直方图中找到百分位数,尽管这可能不是您想要的浮点值,除非您有将预期值分区为一系列分箱的好方法。