在 Fortran 中使用函数 "transpose" 时出错

Error when using the function "transpose" in Fortran

我知道 Fortran 中的 "transpose" 是一个在其对角线上翻转矩阵的运算符。但是,在下面的代码中,我遇到了一个错误,不知道为什么。

密码是:

program main
  implicit none
  real(8)::a(3,2),b(2,1)

  a=reshape((/1.0,2.0,3.0,4.0,5.0,6.0/),(/3,2/))
  b=reshape((/1.0,2.0/),(/2,1/))
  write(*,*)a(1,1:2)

  !Next sentence throw an error
  a(1,1:2)=transpose(b)
end program

错误是:

错误#6366:数组表达式的形状不符合。 [一个]

我觉得"a(1,1:2)"是一行两列,和"transpose(b)"一样,为什么编译器告诉我"the shape do not conform"?

你错了,a(1,1:2)不是二维数组(你称之为矩阵),它是一维数组.

Bu 使用 a(1,.. 您在 "matrix" 中选择了一个明确的 "row",您从中选择了 "row vector" 1:2)

你必须使用

a(1:1,1:2)

对于形状为 1x2 的二维数组(如果需要,可以使用一行和两列的矩阵)。