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