假设我有一个数组:
real, dimension(100000, 5) :: a
此数组将由a(0, :)
到a(n, :)
的实数填充,其中n
是一个小于100000
的数字。在填充所有值之后,我们可以决定n
的值(让我们假设它30000
)。我想将数组重塑为:
real, dimension(30000, 5) :: a
只是为了删除数组中未使用的元素。我不希望执行任何数组复制过程,因为数组很大,因此,它会破坏程序效率。这里有解决方案吗?
答案 0 :(得分:4)
你无能为力。语言中没有任何东西可以缩小数组。特别是当你首先将它声明为固定大小的数组时。而且由于你禁止复制,你真的无能为力。
您没有告诉我们您为什么要这样做。为了节省内存?它是一个固定大小的数组real, dimension(100000, 5)
,就在那里,你无法保存任何东西。您可以使用可分配的数组,但是为了缩小副本是必要的。
或者只是为了更容易使用数组?在旧的FORTRAN 77天做它,声明变量n
并始终使用数组
a(:n,:)
使其连续?您需要使其可分配并将其分配到正确的大小。
在某种程度上,您的问题是典型的XY problem,并且您没有告诉我们实际目标是什么。您只是要求提供一些可能不是解决最终目标的最佳方法的技术细节。考虑使用可分配的数组,并从头开始将其分配到正确的大小。