0
我的问题更多的是要确认我所得出的结论是否正确,并确定是否有人有任何聪明的“解决方法”。通过列表访问数组
我的问题始于想要使用maxloc
的朋友提取数组最大值的位置,然后使用此结果读取其他数组的相应元素。即在伪代码:
c = b(maxloc(a))
然而,这将返回错误
Error: Rank mismatch in array reference at (1) (1/2)
(他正在与(N,N)阵列。)
我做了一些测试,我发现,这确实不起作用。 我的结论是,你需要做这样的事情:
program h
integer :: a(2,2)
integer :: id(2),id2(2)
a(1,1) = 1; a(1,2) = 2; a(2,1) = 3; a(2,2) = 2
id = maxloc(a)
write(*,*) a(id(1),id(2))
end program h
它的工作原理,大家都高兴。那么,除了我。我想知道是否有更好的方法来做到这一点。有什么我失踪?解决问题的简单方法。
你的方法不会调用'maxloc'两次吗? – chw21
哪种方法?关联?不,它不会。 –
好的,我不太了解'associate'是如何工作的,它可能会被优化掉,但如果不是,它会不会为每个索引单独调用'maxloc'? – chw21