这有点复杂; 我欢迎任何关于如何提高问题清晰度的意见.
好吧,说我有一个数组:
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)