假设我有一个像这样声明的维数:
integer, dimension(5) :: dims
dims = (/ 5, 6, 7, 8, 9 /)
我怎样才能最简单地使用此数组来分配另一个数组,使用dims
的元素来指定相应尺寸的大小?假设第二个数组声明如下:
real, dimension(:,:,:,:,:), allocatable :: dset
为什么我不能做以下事情?
allocate (dset(dims(:)))
我尝试编译时得到Error: Rank mismatch in array reference
。
我意识到我可以这样做:
allocate (dset(dims(1), dims(2), dims(3), dims(4), dims(5)))
但我正在寻找更容易扩展的东西。
答案 0 :(得分:1)
由于编译器提供的原因,您无法编写allocate(dset(dims(:)))
:它们具有不同的等级。如果您要打印shape(dims)
,则会在屏幕上看到5
;如果您要打印shape(dset)
,您会看到0 0 0 0 0
或5 6 7 8 9
(取决于您是否分配); dims
是排名为1的数组,dset
是排名为5的数组。
因此,分配可分配的唯一方法是通过您认为不可扩展的显式方法。