在fortran中只为二维数组分配一维
Posted
技术标签:
【中文标题】在fortran中只为二维数组分配一维【英文标题】:Allocate only one dimension for a 2D array in fortran 【发布时间】:2015-06-12 22:50:55 【问题描述】:假设我有一个二维数组 A(:,2),其中只有第一维的大小是未知的。 是否可以仅分配 A 的第一个维度? 如果没有,我每次都必须使用“ allocate(A(n,2)) ”,将 A 视为 A(:,:)。
【问题讨论】:
不,你不能一次“分配”一个数组。也许如果您解释了为什么要这样做(对我迟钝的感觉),那么有人可能会提供一个既满足您的要求又满足 Fortran 规则的解决方案。 如果你事先知道数组的维度,那么我猜A(:,1)
和A(:,2)
指的是不同类型的数量,比如一些 x 和 y 值。那么,主要是为了可读性,单独声明数组可能会更好,例如x_data(:)
和y_data(:)
。但如果没有更多信息,很难说。
正确,您不能将数组声明为.. dimension (:,2), allocatable
。因此,即使您在编写程序时知道某个特定维度,也必须按照您编写的那样使用 allocate 语句分配该维度。
【参考方案1】:
如果第二维的大小始终为 2,您可以创建一个包含两个变量的数据类型,然后分配它们的数组:
program main
implicit none
type two_things
integer :: first
integer :: second
end type two_things
type(two_things), dimension(:), allocatable :: A
allocate(A(100))
A(1)%first = 1
A(1)%second = 2
print*, A(1)%first, A(1)%second, shape(A)
deallocate(A)
end program main
【讨论】:
这是一种很好且合理的方法。谢谢。 这取决于您需要做什么,但请记住,拥有 100 个双组件类型的实例可能不如拥有两个 100 元素数组或一个 2 级数组有效。以上是关于在fortran中只为二维数组分配一维的主要内容,如果未能解决你的问题,请参考以下文章