Fortran 2003 имеет синтаксис квадратных скобок для конкатенации массивов, компилятор Intel fortran также поддерживает его. Я написал здесь простой код для матричной конкатенации:
program matrix
implicit none
real,dimension (3,3) :: mat1,mat2
real,dimension(3,6):: mat3
integer i
mat1=reshape( (/1,2,3,4,5,6,7,8,9/),(/3,3/))
mat2=reshape( (/1,2,3,4,5,6,7,8,9/),(/3,3/))
mat3=[mat1,mat2]
!display
do i=1,3,1
write(*,10) mat3(i,:)
10 format(F10.4)
end do
end program
Но я получаю ошибку как
mat3=[mat1,mat2]
Error: Incompatible ranks 2 and 1 in assignment
Я ожидаю вывод как
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9
Может кто-нибудь прокомментировать, где я ошибаюсь? Что такое ранг 2 и 1 здесь? Я думаю, что все массивы имеют ранг 2.
(/
и/)
для разграничения массива, как показано в двух случаях использованияreshape
в коде. То, как вы пишете, предполагает, что вы можете подумать, что квадратные скобки — это какой-то оператор; они не. - person High Performance Mark   schedule 19.06.2015