Fortran Coder

标题: 数组赋值问题 [打印本页]

作者: 不学无墅!    时间: 2020-8-27 11:42
标题: 数组赋值问题
本帖最后由 不学无墅! 于 2020-8-28 09:11 编辑

有一个三维数组A(20,27,700),还有一个三维数组B(20,27,100),想要实现,在循环中,先将A(20,27,700)的第一层赋给B(20,27,100)的每一层,再将A(20,27,700)的第二层赋给B(20,27,100)的每一层,依次类推,直到将A(20,27,700)的第700层赋给B(20,27,100)的每一层
[Fortran] 纯文本查看 复制代码
Do i = 1,700
      Do j = 1,100
            B(:,:,j) = A(:,:,i)
      end Do
end Do


以上是我的代码,报错error #6366: The shapes of the array expressions do not conform.

求各位前辈指教帮助!

作者: 青衣巷    时间: 2020-8-27 14:17
听得很模糊,你是希望 B = A(:,:,:100) 吧?

作者: li913    时间: 2020-8-27 15:41
确认一下a的形状。

QQ截图20200827154016.png (33.41 KB, 下载次数: 442)

QQ截图20200827154016.png

作者: necrohan    时间: 2020-8-27 17:00
Do i = 1,7
    B = A(:,:,(i-1)*100+1:i*100)
end Do
我猜你可能要的是这个意思
作者: fcode    时间: 2020-8-27 20:42
necrohan 发表于 2020-8-27 17:00
Do i = 1,7
    B = A(:,:,(i-1)*100+1:i*100)
end Do

那用指针方便、高效得多。
作者: 风平老涡    时间: 2020-8-27 21:37
数组间赋值要求数组是必须conformed.
1 Do i = 1,700
2           Do j = 1,100
3                    B(:,:,j) = A(:,:,i)
4              end Do
5 end Do
要求B的第一维与A的第一维相同(20对20),B的第二维与A的第二维相同(27对70)。所显错误就是因为A和B的第二 维不相同导致。
作者: 不学无墅!    时间: 2020-8-28 09:13
原问题 对A的第二维描述错误了  前两维都是相同的 均为 20x27   
作者: 不学无墅!    时间: 2020-8-28 09:18
青衣巷 发表于 2020-8-27 14:17
听得很模糊,你是希望 B = A(:,:,:100) 吧?

我是希望A里的每一层依次赋给 B的每100层,具体来说就是先将B(:,:,1:100)全部等于A(:,:,1)
再将B(:,:,1:100)=A(:,:,2)
...........
最后B(;,;,1:100)=A(:,:,100)
作者: 不学无墅!    时间: 2020-8-28 09:19
风平老涡 发表于 2020-8-27 21:37
数组间赋值要求数组是必须conformed.
1 Do i = 1,700
2           Do j = 1,100

不好意思 原问题描述数组大小的时候 写错了 A B的前两维是相同的
作者: 不学无墅!    时间: 2020-8-28 09:23
necrohan 发表于 2020-8-27 17:00
Do i = 1,7
    B = A(:,:,(i-1)*100+1:i*100)
end Do

谢谢您  但是 不是这个意思
作者: 风平老涡    时间: 2020-8-28 09:49
不学无墅! 发表于 2020-8-28 09:19
不好意思 原问题描述数组大小的时候 写错了 A B的前两维是相同的

在Gfortran10.1.0中,你的代码是正确的,没有错误。
作者: 风平老涡    时间: 2020-8-28 09:57
1. 查一下A,B的定义是否正确。
2. 这个错误是否指其他数组。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2