减小 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,你没有告诉我们实际目的是什么。您只是在询问一些技术细节,这可能不是解决最终目标的最佳方法。考虑使用可分配数组,并从一开始就分配到合适的大小。
假设我有一个数组:
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,你没有告诉我们实际目的是什么。您只是在询问一些技术细节,这可能不是解决最终目标的最佳方法。考虑使用可分配数组,并从一开始就分配到合适的大小。