通过列表访问数组

时间:2017-02-14 09:39:11

标签: arrays fortran

我的问题更多的是要求确认我所得出的结论是正确的,看看是否有人有任何聪明的“解决方法”。

我的问题始于一位想要使用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

它很有效,每个人都很开心。好吧,除了我。我想知道是否有更好的方法。有什么我想念的吗?解决问题的简单方法。

1 个答案:

答案 0 :(得分:4)

是的,这是正确的,maxloc返回一个数组(一种索引向量),你不能将它用于多维数组索引。向量索引做了其他事情,主要用于1-D数组。

您可以使用maxval()直接获取数组的最大值,但这可能不是您在所有情况下都需要的。

您还可以使用关联并避免在范围中声明新变量:

associate(id => maxloc(a))
  write(*,*) a(id(1),id(2))
end associate

但如果您的使用更复杂且无法由maxval()完成,那将更有用。