1

我有一个 3D 数组 NUM(0:9,0:9,0:9) 用作各种计数器,以跟踪某些坐标之间有多少分子。无论如何,该数组最终成为我想要制作直方图的数字列表。如果我将 NUM 写入一个文件,然后用我的直方图程序打开它并将其作为一维数组读入,一切都很好,但我想在一个程序中完成这一切,我想知道是否有如何获取存储在 NUM 中的所有数字并将其制成一维数组?

如果我不是很清楚,我很抱歉,我是编程新手,我仍在学习!

4

2 回答 2

6

该声明

new_array = pack(old_array,.true.)

会将 rank-3 扁平old_array化为 rank-1 new_array。您可以将其声明为

real(kind=...), dimension(:), allocatable :: new_array

...您选择的方法替换 ,以指定要使用的实数类型。

于 2013-06-12T16:54:27.993 回答
0

由于它是一个小数组,您可能想尝试

    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)适当调整。

于 2013-06-14T16:42:01.123 回答