2

假设我有一个这样声明的维度数组:

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)))

但我正在寻找更容易扩展的东西。

4

1 回答 1

2

你不能写出allocate(dset(dims(:)))编译器给出的确切原因:它们有不同的等级。如果你要打印shape(dims),你会5在屏幕上看到;如果你要打印shape(dset),你会看到0 0 0 0 0或者5 6 7 8 9(取决于你是否分配了它);dims是 rank-1 数组,dset是 rank-5 数组。

因此,分配可分配对象的唯一方法几乎是通过您认为不可扩展的显式方法。

于 2013-07-22T17:23:35.093 回答