减少Fortran 90中阵列的大小

时间:2018-01-13 10:34:25

标签: fortran fortran90

假设我有一个数组:

real, dimension(100000, 5) :: a

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

real, dimension(30000, 5) :: a

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

1 个答案:

答案 0 :(得分:4)

你无能为力。语言中没有任何东西可以缩小数组。特别是当你首先将它声明为固定大小的数组时。而且由于你禁止复制,你真的无能为力。

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

或者只是为了更容易使用数组?在旧的FORTRAN 77天做它,声明变量n并始终使用数组

a(:n,:)

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

在某种程度上,您的问题是典型的XY problem,并且您没有告诉我们实际目标是什么。您只是要求提供一些可能不是解决最终目标的最佳方法的技术细节。考虑使用可分配的数组,并从头开始将其分配到正确的大小。