2015-03-13 145 views
0

我試圖找到最接近最大值的條目的20%。考慮這個程序查找最接近最大值的數組條目的20%

program max_find 
    implicit none 
    double precision, dimension(10) :: array 
    array = [4.0, 7.0, 6.0, 9.0, 3.0, 2.0, 10.0, 5.0, 1.0, 8.0] 
    print *, array == maxval(array) 
end program 

哪打印F F F F F F T F F F。現在我想找到邏輯數組F F F T F F T F F F(10個條目中的2個是真的)。我可以將其包含在一個循環中,計算array > threshold中的條目數並降低閾值,直到得到ratio*size(array) < count(array > threshold)(對於ratio = 0.2),但是如何明智地選擇閾值?有更好的方法嗎?

回答

2

調用一個子程序對數組進行排序(Fortran代碼在公有域中執行)並使用排序後的數組來選擇閾值。您不需要對整個數組進行排序,並且在完全排序時間過長的情況下,您可以使用公有領域ORDERPACK 2.0庫中的部分排名子例程。

+0

謝謝!看起來很明顯,但事實上,大多數情況下都是這樣。 – Psirus 2015-03-13 14:33:16