假设我有一个数组:
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)
只是为了删除数组中未使用的元素。我不希望执行任何数组复制过程,因为数组很大,因此它会破坏程序效率。这里有解决办法吗?
你什么也做不了。语言中没有任何内容可以缩小数组。尤其是当您首先将其声明为固定大小的数组时。既然你禁止复制,你真的无能为力。
你没有告诉我们你为什么要这样做。为了节省内存?它是一个固定大小的数组real, dimension(100000, 5)
,它就在那里,你不能保存任何东西。你可以使用一个可分配的数组,但为了缩小副本是必要的。
还是只是为了更轻松地使用阵列?像在旧的 FORTRAN 77 天一样,声明一个变量n
并始终使用数组作为
a(:n,:)
Run Code Online (Sandbox Code Playgroud)
让它连续?您需要使其可分配并将其分配到正确的大小。
在某种程度上,您的问题是典型的XY 问题,您没有告诉我们实际目标是什么。您只是要求提供一些技术细节,这可能不是解决最终目标的最佳方式。考虑使用可分配数组并从一开始就将其分配到正确的大小。
归档时间: |
|
查看次数: |
1115 次 |
最近记录: |