相关疑难解决方法(0)

使用相互依赖的维度分配动态数组

这有点复杂; 我欢迎任何关于如何提高问题清晰度的意见.

好吧,说我有一个数组:

real, allocatable :: A(:,:,:)
Run Code Online (Sandbox Code Playgroud)

我想在使用它之前分配它.第三维的大小是否可能取决于第二维的大小?

例如

do i=1,n
allocate(A(3,i,i**2))
end do
Run Code Online (Sandbox Code Playgroud)

显然以上都行不通.我想最终得到一个带有形状的数组(或一组数组)

(3,1,1), (3,2,4), (3,3,9), ... (3, n, n^2)
Run Code Online (Sandbox Code Playgroud)

其中第三维的大小是第二维的大小的平方.

我对依赖维度大小的规则有点复杂,但如果可以进行平方,我可以做其余的事情.

这可能吗?如果是这样,我如何在Fortran中实现它?

会有什么shape(A)回报?那会很有趣.

我的另一种选择是分配到所需的最大尺寸,并注意只在计算中使用某些元素,即

allocate(A(3,n,n**2))
Run Code Online (Sandbox Code Playgroud)

虽然我现在对记忆并不苛刻,但我希望有良好的编程习惯.无论如何,这是一个有趣的问题.

谢谢.

编辑:

如果维度的大小取决于另一维度中元素的

在下面的答案中,两个维度中数组的大小取决于B的索引.我想要的是某些东西

type myarray
    real :: coord(3)
    integer,allocatable :: lev(:)
    integer, allocatable :: cell(:)
endtype myarray

type(myarray), allocatable :: data

allocate(data(m))
allocate(data%lev(n))

forall (j=1:n) !simple now, for argument's sake
    lev(j)=j
endforall

! I was thinking of using a FORALL loop here, but the errors returned …
Run Code Online (Sandbox Code Playgroud)

fortran multidimensional-array dynamic-memory-allocation

5
推荐指数
1
解决办法
2817
查看次数