2015-02-10 78 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進行排序,這顯然比推力更快。

另一種選擇是從直方圖中找到百分位數,儘管這可能不是您想要的浮點值,除非您有將預期值分區爲一系列分箱的好方法。