gpt4 book ai didi

arrays - 输出3D数组的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:28:36 26 4
gpt4 key购买 nike

我正在努力想出一个输出 3D 数组的算法。我基本上有一个包含 9 个二维数组的数组,我需要将它们组合成一个 3X3 网格并作为矩阵输出到一个文本文件中。所以我有:

real:: array3D(9,16,16)

然后我需要按顺序(从左到右,从上到下)将这 9 个 16x16 数组放在一个 3x3 的网格中:

real:: array2D(48,48)

任何帮助都会很棒。

[编辑:评论信息]:这是 MPI 程序的一部分,其中一个 48x48 矩阵被分成 9 个 16x16 矩阵,其中 9 个进程中的每一个都被分配给较大数组的一个“子网格”。就像评论中提到的数独网格一样,每个进程都将公式应用于其自己的子网格中的每个元素。然后需要将每个过程计算出的最终值放回 48x48 矩阵中,以便在文本文件中显示。目前看起来像这样:

if(procID.ne.0)then!Send all arrays to root
call MPI_SEND (array, row*col, MPI_REAL, 0, procID+1000, MPI_COMM_WORLD, ierr)
else
complete(1,:,:)=array(:,:)
do i=2, 9
call MPI_RECV (recvArray, row*col, MPI_REAL, i-1, (i-1)+1000, MPI_COMM_WORLD, status, ierr)
complete(i,:,:)=recvArray
end do

我想要得到的是一种算法,我可以用它来显示 complete在文本文件中作为矩阵,以便我阅读。 (我知道变量名称与上面不同,但我试图尽可能简化/概括我的原始问题。这里 array 再次具有维度 48x48 但我只对每个中的 16x16 block 感兴趣( 9 个数独谜题,每个只需要一个子网格)我想要的 16x16 block 由 complete/array3D 的第一个索引定义:1-9,我想把这些子 block 排列在另一个48x48 数组说 arrayOut/array2D )。如果我写的内容没有多大意义,我会尝试对问题进行图形解释。

感谢@george,他的回答如下,将其放入您需要的数组中:

do majorRow=1,3
do majorCol=1,3
subBlock=(majorRow-1)*3+majorCol
do minorRow=majorRow*16-(16-1),majorRow*16
do minorCol=majorCol*16-(16-1),majorCol*16
outArray(minorRow,minorCol)=complete(subBlock,minorRow,minorCol)
end do
end do
end do
end do

最佳答案

无需复制到新数组即可输出。

伪代码:(我可能已经调换了行/列,但这很容易修复)

do majorrow=1,3
do minorrow=1,16
do majorcol=1,3
subblock=(majorrow-1)*3+majorcol
do minorcol=1,16
write(advance=no)array3D(subblock,minorrow,minorcol)
enddo
enddo !end of row
write() ! to advance line at end of row.
enddo
enddo

注意最里面的循环可以替换为

 write(advance=no)array3D(subblock,minorrow,:)

你仍然不需要提前,因为你每行写了 3 次。

关于arrays - 输出3D数组的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com