У меня есть два массива fListU и fListD, оба из которых содержат 4-х кортежей. В частности:Массирование массивов в Fortran
fListU = [(2, 1, 1, 0), (2, 5, 5, 0), (5, 4, 10, 0), (6, 1, 5, 0), (6, 5, 7, 0)]
fListD = [(1, 4, 0, 4), (3, 4, 0, 4), (5, 4, 0, 6)]
Теперь я хочу, чтобы соединить их в один массив, с условием, что, когда первые два элемента кортежей равны, то следует добавить третий и четвертый элементы двух списков. В этом случае результат Ищу является
fList = [(2, 1, 1, 0), (2, 5, 5, 0), (5, 4, 10, 6), (6, 1, 5, 0),
(6, 5, 7, 0), (1, 4, 0, 4), (3, 4, 0, 4)]
где (5, 4, 10, 0) и (5, 4, 0, 6) объединяются (5, 4, 10, 6) ,
Это то, что я пробовал.
ALLOCATE (fList((n-1)**2,4))
fList = 0
p = 1 ! p signifies the position in fList.
DO k = 1, ((n-1)**2), 1 ! k is the index for fListD
DO l = 1, ((n-1)**2), 1 ! l is the index for fListU
IF (ALL (fListU(l,1:2) == fListD(k,1:2))) THEN
fList(p,1:2) = fListU(l,1:2)
fList(p,3) = fListU(l,3)
fList(p,4) = fListD(k,4)
ELSE
fList(p,:) = fListU(l,:)
p = p+1
fList(p,:) = fListD(k,:)
p = p+1
END IF
END DO
END DO
Это не то, что я хочу. В чем проблема?
Вы хотите * добавить * третье и четвертое значения, заменить их? –
Подождите, 'Fortran' поддерживает кортежи? – ja72
@ ja72 Я предполагаю, что он имел в виду, что 4 числа контекстуально принадлежат друг другу. Я никогда не слышал о поддержке Fortran кортежей, таких как python. Вы увидите, что в моем ответе я использовал термин * кортежи *, но он рассматривается как одно из двух измерений массива. – chw21