我有一个 3D 数组 NUM(0:9,0:9,0:9) 用作各种计数器,以跟踪某些坐标之间有多少分子。无论如何,该数组最终成为我想要制作直方图的数字列表。如果我将 NUM 写入一个文件,然后用我的直方图程序打开它并将其作为一维数组读入,一切都很好,但我想在一个程序中完成这一切,我想知道是否有如何获取存储在 NUM 中的所有数字并将其制成一维数组?
如果我不是很清楚,我很抱歉,我是编程新手,我仍在学习!
我有一个 3D 数组 NUM(0:9,0:9,0:9) 用作各种计数器,以跟踪某些坐标之间有多少分子。无论如何,该数组最终成为我想要制作直方图的数字列表。如果我将 NUM 写入一个文件,然后用我的直方图程序打开它并将其作为一维数组读入,一切都很好,但我想在一个程序中完成这一切,我想知道是否有如何获取存储在 NUM 中的所有数字并将其制成一维数组?
如果我不是很清楚,我很抱歉,我是编程新手,我仍在学习!
该声明
new_array = pack(old_array,.true.)
会将 rank-3 扁平old_array
化为 rank-1 new_array
。您可以将其声明为
real(kind=...), dimension(:), allocatable :: new_array
用...
您选择的方法替换 ,以指定要使用的实数类型。
由于它是一个小数组,您可能想尝试
INTEGER :: i, j, k, n
n=0 ! or 1?
DO k=0,9
DO j=0,9
DO i=0,9
num1d(n) = num(i,j,k)
n = n+1
ENDDO
ENDDO
ENDDO
解压它需要使用num(i,j,k) = num1d(n)
.
编辑:我误解了你想要什么。为了做你想做的事,你需要知道分子的位置及其与原点的距离r。假设这是已知的(或可确定的),您需要执行以下操作:
INTEGER :: i, j, k, n
num1d=0
DO k=0,9
DO j=0,9
DO i=0,9
r = ....
n = int(r)
num1d(n) = num1d(n) + num(i,j,k)
ENDDO
ENDDO
ENDDO
这....
意味着你必须从原点获得距离。以上还假设您的 bin 宽度为 1,如果您确实想要其他宽度,则需要n=int(r)
适当调整。