我正在尝试在 Fortran 中创建一个类似于 MATLAB 中的单元格的数组。
基本上(例如)我试图创建一个数组
X(10)
,其中元素X(1)
是一个维度为(20,2)的数组,X(2)
是一个维度为(25,2)的数组,等等
我该怎么做?
您的具体情况的等效方法是使用包含单个组件的派生类型来实现。 元胞数组对应于该派生类型的数组,位于元胞数组每个元素内部的数组就是每个数组元素的数组组件。
类似:
TYPE Cell
! Allocatable component (F2003) allows runtime variation
! in the shape of the component.
REAL, ALLOCATABLE :: component(:,:)
END TYPE Cell
! For the sake of this example, the "cell array" equivalent
! is fixed length.
TYPE(Cell) :: x(10)
! Allocate components to the required length. (Alternative
! ways of achieving this allocation exist.)
ALLOCATE(x(1)%component(20,2))
ALLOCATE(x(2)%component(25,2))
...
! Work with x...
MATLAB 中的单元格比上面的特定类型具有更大的灵活性(这实际上更类似于 MATLAB 结构体的概念)。 对于接近元胞数组灵活性的东西,您需要使用无限的多态组件和进一步的中间类型定义。