Fortran Coder

查看: 29063|回复: 11
打印 上一主题 下一主题

[求助] 数组赋值问题

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
29 元
贡献
17 点
跳转到指定楼层
楼主
发表于 2020-8-27 11:42:46 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 不学无墅! 于 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.

求各位前辈指教帮助!
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

12#
发表于 2020-8-28 09:57:38 | 只看该作者
1. 查一下A,B的定义是否正确。
2. 这个错误是否指其他数组。

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

11#
发表于 2020-8-28 09:49:46 | 只看该作者
不学无墅! 发表于 2020-8-28 09:19
不好意思 原问题描述数组大小的时候 写错了 A B的前两维是相同的

在Gfortran10.1.0中,你的代码是正确的,没有错误。

6

帖子

2

主题

0

精华

入门

F 币
29 元
贡献
17 点
10#
 楼主| 发表于 2020-8-28 09:23:35 | 只看该作者
necrohan 发表于 2020-8-27 17:00
Do i = 1,7
    B = A(:,:,(i-1)*100+1:i*100)
end Do

谢谢您  但是 不是这个意思

6

帖子

2

主题

0

精华

入门

F 币
29 元
贡献
17 点
9#
 楼主| 发表于 2020-8-28 09:19:17 | 只看该作者
风平老涡 发表于 2020-8-27 21:37
数组间赋值要求数组是必须conformed.
1 Do i = 1,700
2           Do j = 1,100

不好意思 原问题描述数组大小的时候 写错了 A B的前两维是相同的

6

帖子

2

主题

0

精华

入门

F 币
29 元
贡献
17 点
8#
 楼主| 发表于 2020-8-28 09:18:09 | 只看该作者
青衣巷 发表于 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)

6

帖子

2

主题

0

精华

入门

F 币
29 元
贡献
17 点
7#
 楼主| 发表于 2020-8-28 09:13:11 | 只看该作者
原问题 对A的第二维描述错误了  前两维都是相同的 均为 20x27   

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

6#
发表于 2020-8-27 21:37:42 | 只看该作者
数组间赋值要求数组是必须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的第二 维不相同导致。

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2020-8-27 20:42:44 | 只看该作者
necrohan 发表于 2020-8-27 17:00
Do i = 1,7
    B = A(:,:,(i-1)*100+1:i*100)
end Do

那用指针方便、高效得多。

250

帖子

2

主题

0

精华

宗师

F 币
1731 元
贡献
872 点

规矩勋章

地板
发表于 2020-8-27 17:00:22 | 只看该作者
Do i = 1,7
    B = A(:,:,(i-1)*100+1:i*100)
end Do
我猜你可能要的是这个意思
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-22 20:25

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表