Скажем, у меня есть трехмерный массив A(1:3,1:4,1:5)
, и я хочу работать только с его частью, например:
real :: A(1:3,1:4,1:5), B(1:5,1:2)
real, allocatable :: C(:,:)
allocate(C(size(A,1),size(B,2)))
C = matmul(A(1:3,1,1:5),B)
Фортран с этим справляется. Однако, если мне нужно было иметь дело с транспонированием, то функция transpose
в Фортране запуталась, например:
real :: A(1:3,1:4,1:5), B(1:3,1:2)
real, allocatable :: C(:,:)
allocate(C(size(A,3),size(B,2)))
C = matmul(transpose(A(1:3,1,1:5)),B)
Как я могу поменять местами измерения в массиве с помощью Fortran? Например, у меня есть A(3,4,5); есть ли функция/команда, которая берет это и дает мне A (5,4,3) или A (4,3,5) или любое другое расположение, которое я мог бы пожелать? Без, конечно, чего-то вроде копирования A в фиктивный массив с размерами в требуемом порядке. Я ищу простой элегантный способ с одной строкой.
Спасибо.