Я нахожусь в процессе переноса кода Fortran 77 (ок. 1990 г.), который изначально был написан на бейсике (ок. 1986 г.), на Python 3 с использованием нескольких модулей, а именно Numpy и Pandas.
Он использует несколько циклов для назначения элементов массивов. Например:
6050 do 6100 J = 1,3
Y(J,1) = Z(J)
6100 continue
где Z инициализируется как
5000 do 5500 J = 1,3
Z(J) = 0
5500 continue
и Z и Y были выделены памяти как
dimension C(4), Z(4), ... K(4,4), Y(4,4)
Далее по коду Z-вектор переназначается после построения вектора C с использованием массива K
6500 do 6600 M = 1,3
C(M) = (K(M,1)+2*K(M,2)+2*K(M,3)+K(M,4))/6
Z(M) = Z(M) + C(M)
6600 continue
Есть несколько мест, где это происходит с различными другими массивами. Тем не менее, Z и Y являются наиболее критичными массивами, так как именно они назначают большинство переменных.
Мне было интересно, как с этим справиться? или если есть лучший способ сделать это.
В настоящее время у меня есть
import numpy as np
...
Z = np.zeroes((1,4))
Y = np.zeroes((4,4))
(...etc...)
...
for n in range(1,i) # main loop of calculation
...
Y[0,:] = Z
...
C = (K[:,0]+2*K[:,1]+2*K[:,2]+K[:,3])/6
Z = Z + C
но я не думаю, что это правильно.
У меня есть только распечатка исходного кода. У меня нет копий файлов ввода / вывода. Если бы у меня был хотя бы правильно отформатированный входной файл, я бы перепечатал фортран в компилятор, запустил его и посмотрел, что происходит в реальном коде.