2015-03-13 102 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