仅在某个维度上求和

时间:2017-03-30 14:51:34

标签: sum fortran

我有一个Fortran 90array(矩阵),如:

REAL(8),DIMENSION(Xmax, Ymax, Zmax, Xmax, Ymax, Zmax) :: Mat

我以这种方式阅读我的矩阵:

    DO X1=1,Xmax
      Do Y1=1,Ymax
        DO Z1=1,Zmax 

           DO Xv=1,Xmax
              Do Yv=1,Ymax
                DO Zv=1,Zmax 

                   Mat(X1, Y1, Z1, Xv, Yv, Zv)


           END DO
         END DO
        END DO
      END DO
    END DO
  END DO

我想创建一个新的矩阵NewMat(仅限维度(Xmax,Ymax,Zmax)),它将包含每个(Xv, Yv, Zv)的总和,分别来自我的初始(X1, Y1, Z1)矩阵。

我的问题是:我需要迭代求和吗?或者有没有办法使用某些功能?什么会更有效?

1 个答案:

答案 0 :(得分:4)

您几乎肯定会寻找内在sum函数,该函数可用于将数组(通过添加)从排名n减少到排名n-1。所以表达式

 sum(mat, dim=6)

将会“变平”' mat的第6维。我并不完全确定我完全理解你要做的是什么,而是分配

 newmat = sum(sum(sum(mat, dim=6), dim=5), dim=4)

可能满足您的需求。我没有在这台机器上安装Fortran,如果我有,我可能不愿意设置一个6级阵列来测试它。所以,如果它不是你想要的东西,直到你得到它...

这可能不比嵌套循环快,并且它可能更难以阅读,但看起来它似乎是由了解现代Fortran阵列操作的人编写的。