Выделить массив из массива размеров

Допустим, у меня есть массив измерений, объявленных так:

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

Но я ищу что-то более легко расширяемое.

1 ответ

Решение

Вы не можете написать allocate(dset(dims(:))) именно по этой причине компилятор дает: они имеют разные ранги. Если бы вы должны были напечатать shape(dims)вы бы увидели 5 на экране; если бы вы должны были напечатать shape(dset)вы бы увидели либо 0 0 0 0 0 или же 5 6 7 8 9 (зависит, выделил ли ты это или нет); dims является массивом ранга 1, dset является массивом ранга 5

В общем, единственный способ выделить выделяемое - это явный метод, который, по вашему мнению, не может быть расширен.

Другие вопросы по тегам