我正在尝试找到最接近最大值的条目的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
),但如何合理地选择阈值?有更好的方法吗?
答案 0 :(得分:2)
调用子程序对数组进行排序(要在公共域中执行Fortran代码),并使用排序数组来选择阈值。您不需要对整个数组进行排序,并且在完全排序时间过长的情况下,您可以使用公共域ORDERPACK 2.0库中的部分排名子例程。