Fortran - 操作函数

操作函数是移位函数。 移位函数返回数组的形状不变,但移动元素。

Sr.No 函数 & 描述
1

cshift(array, shift, dim)

如果shift为正,则通过向左移动位置,如果为负,则向右移动位置来执行循环移位。 如果数组是一个向量,则移位将以自然的方式完成,如果它是一个更高等级的数组,则移位将发生在沿维度 dim 的所有部分中。 如果缺少 dim ,则将其视为 1,在其他情况下,它必须是 1 和 n 之间的标量整数(其中 n 等于 array 的秩)。 参数 shift 是标量整数或阶为 n-1 的整数数组,并且与数组的形状相同,除了沿着维度 dim(由于阶较低而被删除)。 因此,不同的部分可以沿不同的方向并以不同数量的位置移动。

2

eoshift(array, shift, boundary, dim)

现在是结束轮班。 如果shift为正,则执行左移;如果为负,则执行右移。 从边界中取出新元素,而不是移出元素。 如果数组是一个向量,则移位是以自然的方式完成的,如果它是一个更高阶的数组,则所有部分上的移位都是沿着维度 dim 进行的。 如果缺少 dim,则将其视为 1,在其他情况下,它必须具有 1 和 n 之间的标量整数值(其中 n 等于数组的秩)。如果数组的秩为 1,则参数 shift 是一个标量整数,在其他情况下,它可以是一个标量整数或一个秩为 n-1 的整数数组,并且除了沿维度 dim (由于排名较低而被删除) 外,其形状与数组 array 相同。

3

transpose (matrix)

它转置一个矩阵,该矩阵是一个 2 阶数组。它替换矩阵中的行和列。

示例

以下示例演示了这个概念 −

program arrayShift
implicit none

   real, dimension(1:6) :: a = (/ 21.0, 22.0, 23.0, 24.0, 25.0, 26.0 /)
   real, dimension(1:6) :: x, y
   write(*,10) a
   
   x = cshift ( a, shift = 2)
   write(*,10) x
   
   y = cshift (a, shift = -2)
   write(*,10) y
   
   x = eoshift ( a, shift = 2)
   write(*,10) x
   
   y = eoshift ( a, shift = -2)
   write(*,10) y
   
   10 format(1x,6f6.1)

end program arrayShift

当上面的代码被编译并执行时,会产生以下结果 −

21.0  22.0  23.0  24.0  25.0  26.0
23.0  24.0  25.0  26.0  21.0  22.0
25.0  26.0  21.0  22.0  23.0  24.0
23.0  24.0  25.0  26.0   0.0   0.0
0.0    0.0  21.0  22.0  23.0  24.0

示例

以下示例演示矩阵的转置 −

program matrixTranspose
implicit none

   interface
      subroutine write_matrix(a)
         integer, dimension(:,:) :: a
      end subroutine write_matrix
   end interface

   integer, dimension(3,3) :: a, b
   integer :: i, j
    
   do i = 1, 3
      do j = 1, 3
         a(i, j) = i
      end do
   end do
   
   print *, 'Matrix Transpose: A Matrix'
   
   call write_matrix(a)
   b = transpose(a)
   print *, 'Transposed Matrix:'
   
   call write_matrix(b)
end program matrixTranspose


subroutine write_matrix(a)

   integer, dimension(:,:) :: a
   write(*,*)
   
   do i = lbound(a,1), ubound(a,1)
      write(*,*) (a(i,j), j = lbound(a,2), ubound(a,2))
   end do
   
end subroutine write_matrix

当上面的代码被编译并执行时,会产生以下结果 −

Matrix Transpose: A Matrix

1  1  1
2  2  2
3  3  3
Transposed Matrix:

1  2  3
1  2  3
1  2  3

❮ fortran_arrays.htm