减少 Fortran 90 中数组的大小

fro*_*hem 2 fortran fortran90

假设我有一个数组:

real, dimension(100000, 5) :: a
Run Code Online (Sandbox Code Playgroud)

该数组将由实数填充,a(0, :)直到a(n, :)wheren是小于 的数字100000。填充完所有值后,我们可以决定的值n(让我们假设它30000)。我想将数组重塑为:

real, dimension(30000, 5) :: a
Run Code Online (Sandbox Code Playgroud)

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

Vla*_*r F 5

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

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

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

a(:n,:)
Run Code Online (Sandbox Code Playgroud)

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

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