我有一个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)
矩阵。
我的问题是:我需要迭代求和吗?或者有没有办法使用某些功能?什么会更有效?
答案 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阵列操作的人编写的。