减小 Fortran 90 中数组的大小

Decrease size of array in Fortran 90

假设我有一个数组:

real, dimension(100000, 5) :: a

这个数组将由从 a(0, :)a(n, :) 的实数填充,其中 n 是小于 100000 的数字。填充所有值后,我们可以确定 n 的值(假设它是 30000)。我想将数组重塑为:

real, dimension(30000, 5) :: a

只是为了删除数组中未使用的元素。我不希望执行任何数组复制过程,因为数组很大,所以它会破坏程序效率。这里有什么解决方案吗?

你无能为力。语言中没有任何东西可以缩小数组。尤其是当您首先将其声明为固定大小的数组时。既然你禁止复制,你真的无能为力。

你没有告诉我们你为什么要这样做。为了节省内存?它是一个固定大小的数组real, dimension(100000, 5),它就在那里,你不能保存任何东西。您可以使用可分配数组,但要缩小 副本是必要的 .

或者只是为了更轻松地使用数组?像在旧的 FORTRAN 77 天一样,声明一个变量 n 并始终将数组用作

a(:n,:)

让它连续?您需要使其可分配并将其分配到正确的大小。

从某种程度上说,你的问题是典型的XY problem,你没有告诉我们实际目的是什么。您只是在询问一些技术细节,这可能不是解决最终目标的最佳方法。考虑使用可分配数组,并从一开始就分配到合适的大小。