суммирование квадратного массива - PullRequest
0 голосов
/ 09 апреля 2019

Привет, я пытаюсь суммировать двумерный квадратный массив. Предположим, что массив F(i,j) хорошо определен для всех точек i,j. Я могу суммировать весь массив всего лишь sum(F), но я хочу суммировать массив, начиная с небольшого квадрата, а затем до полного размера массива, что потребует цикла DO. Если бы я утомительно выписывал логику, я бы хотел сложить массив F(i,j) следующим образом:

DO i = -1,1
DO j = -1,1

     value1 = sum(F)

END DO
END DO

DO i = -2,2
DO j = -2,2

     value2 = sum(F)

END DO
END DO

DO i = -3,3
DO j = -3,3

     value3 = sum(F)

END DO
END DO

и переходите к i=-30,30, j=-30,30. Я пытался реализовать это в один DO цикл с помощью

DO i = -30,30
DO j = -30,30

     value4 = sum(F(i:i+1,j:j+1))

END DO
END DO

но это дает мне неверные результаты. Как я могу это исправить, чтобы я мог реализовать все это в одном цикле do? Спасибо.

1 Ответ

3 голосов
/ 10 апреля 2019

Если я расшифрую то, что вы пытаетесь сделать, у вас есть двумерный массив с настраиваемыми экстентами от -30 до 30 в обоих измерениях? Затем вы хотите начать с матрицы 3х3 в центре, получить сумму. Затем увеличьте его до 5х5 и получите сумму. Продолжайте, пока не получите сумму всей матрицы.

Тогда у вас будет 30 сумм. Да, вы можете сделать это за один цикл. Помещение ответов в одномерный массив Sums (30) будет выглядеть так:

do i = 1, 30
   Sums(i) = Sum(F(-i:i,-i:i))
end do

Обозначение индекса в F выделяет растущие квадратные матрицы для подачи в функцию Sum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...