Fortran 中的形状内在函数

shape intrinsic function in fortran

我正在研究 Fortran 中的 shape() 内在函数:

program test

    integer, dimension(5,3) :: A
    integer, dimension(2) :: ShapeA

    ShapeA = shape(A)
    print *, ShapeA(1)
    print *, ShapeA(2)
end program test

我理解 shape 函数 returns 一个包含数组 A 长度和宽度的 2 元素向量。在上面的代码中,shape(A) 的输出被传递给预定义的变量ShapeA。然后打印出ShapeA的内容,即5和3.

我想找到一种方法来引用 shape(A) 的输出内容,而不必将其分配给中间变量 ShapeA

这类似于 matlab size 函数,它启用如下循环结构:

A =  [1 2 3 5 4; 2 3 5 4 5]

for i = 1:size(A,2)
    A(2,i)
end

这意味着用户不需要像这样分配另一个变量:

A =  [1 2 3 5 4; 2 3 5 4 5]
sizeA = size(A,2)

for i = 1:sizeA
    A(2,i)
end

在 fortran 中,有必要声明变量,使用 size 语句为其赋值,然后在循环中包含该变量。我想删除前两个步骤,看看是否可以像在 matlab 中那样完成。有任何想法吗?谢谢。

在 fortran 形状手册页中有一个 link 到 SIZE,特别是(强调我的)

Description:

Determine the extent of ARRAY along a specified dimension DIM, or the total number of elements in ARRAY if DIM is absent.

program test

    integer, dimension(5,3) :: A

    print *, size(A,1)
    print *, size(A,2)
end program test