Reshape
优质
小牛编辑
135浏览
2023-12-01
下表描述了重塑功能:
功能 | 描述 |
---|---|
reshape(source, shape, pad, order) | 它构造一个具有指定形状形状的数组,该数组从给定数组源中的元素开始。 如果不包括垫,那么源的尺寸必须至少是产品(形状)。 如果包含pad,则它必须与source具有相同的类型。 如果包含order,则它必须是一个形状与形状相同的整数数组,并且值必须是(1,2,3,...,n)的排列,其中n是形状中元素的数量,它必须小于或等于7。 |
Example
以下示例演示了以下概念:
program arrayReshape
implicit none
interface
subroutine write_matrix(a)
real, dimension(:,:) :: a
end subroutine write_matrix
end interface
real, dimension (1:9) :: b = (/ 21, 22, 23, 24, 25, 26, 27, 28, 29 /)
real, dimension (1:3, 1:3) :: c, d, e
real, dimension (1:4, 1:4) :: f, g, h
integer, dimension (1:2) :: order1 = (/ 1, 2 /)
integer, dimension (1:2) :: order2 = (/ 2, 1 /)
real, dimension (1:16) :: pad1 = (/ -1, -2, -3, -4, -5, -6, -7, -8, &
& -9, -10, -11, -12, -13, -14, -15, -16 /)
c = reshape( b, (/ 3, 3 /) )
call write_matrix(c)
d = reshape( b, (/ 3, 3 /), order = order1)
call write_matrix(d)
e = reshape( b, (/ 3, 3 /), order = order2)
call write_matrix(e)
f = reshape( b, (/ 4, 4 /), pad = pad1)
call write_matrix(f)
g = reshape( b, (/ 4, 4 /), pad = pad1, order = order1)
call write_matrix(g)
h = reshape( b, (/ 4, 4 /), pad = pad1, order = order2)
call write_matrix(h)
end program arrayReshape
subroutine write_matrix(a)
real, 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
编译并执行上述代码时,会产生以下结果:
21.0000000 24.0000000 27.0000000
22.0000000 25.0000000 28.0000000
23.0000000 26.0000000 29.0000000
21.0000000 24.0000000 27.0000000
22.0000000 25.0000000 28.0000000
23.0000000 26.0000000 29.0000000
21.0000000 22.0000000 23.0000000
24.0000000 25.0000000 26.0000000
27.0000000 28.0000000 29.0000000
21.0000000 25.0000000 29.0000000 -4.00000000
22.0000000 26.0000000 -1.00000000 -5.00000000
23.0000000 27.0000000 -2.00000000 -6.00000000
24.0000000 28.0000000 -3.00000000 -7.00000000
21.0000000 25.0000000 29.0000000 -4.00000000
22.0000000 26.0000000 -1.00000000 -5.00000000
23.0000000 27.0000000 -2.00000000 -6.00000000
24.0000000 28.0000000 -3.00000000 -7.00000000
21.0000000 22.0000000 23.0000000 24.0000000
25.0000000 26.0000000 27.0000000 28.0000000
29.0000000 -1.00000000 -2.00000000 -3.00000000
-4.00000000 -5.00000000 -6.00000000 -7.00000000