Мой вопрос скорее является поиском подтверждения того, что выводы, которые я нарисовал, верны и чтобы увидеть, есть ли у кого-нибудь умные «обходы».Доступ к массиву через список
Мои проблемы начинаются с друга, желающего использовать 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