4

例如,这段代码:

program sandbox
    implicit none
    real, dimension(2, 2) :: p
    p = reshape((/ 1, 3, 2, 4 /), shape(p))

    print *, spread(P, 2, 2)

end program sandbox

返回此数组:

1 1 2 2
3 3 4 4

但我正试图让它返回这个”

1 2 1 2
3 4 3 4

这可以使用spread吗?实际上,它需要被概括,因为我可能会产生像这样的矩阵

1 2 1 2 1 2 1 2
3 4 3 4 3 4 3 4

取决于我在编译时不知道的其他变量。

4

1 回答 1

4

试试这个(所有都在 Fortran 90 标准中,除了[ ]代替的符号(/ /)

program sandbox
   implicit none
   real, dimension(2, 2) :: p
   real, dimension(2, 4) :: q
   integer i

   print *, "p"
   p = reshape([1, 3, 2, 4], shape(p))
   do i=1, 2
      print *, p(i, :)
   end do

   print *, "spread (orig)"
   q = reshape(spread(p, 2, 2), [2, 4])
   do i=1, 2
      print *, q(i, :)
   end do

   print *, "spread"
   q = reshape(spread(transpose(p), 2, 2), [2, 4], order=[2, 1])
   do i=1, 2
      print *, q(i, :)
   end do

   print *, "[p, p]"
   q = reshape([p, p], [2, 4])
   do i=1, 2
      print *, q(i, :)
   end do
end program sandbox
于 2013-09-12T20:06:26.373 回答