Fortran Coder

查看: 12462|回复: 6
打印 上一主题 下一主题

[数值问题] 如何高效的将一维数组重复赋值给二维数组?

[复制链接]

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
跳转到指定楼层
楼主
发表于 2020-9-10 10:55:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有一个一维数组U包含N个元素,和二维数组sU N*N个元素,需要把U赋值给sU的每一行,如何快速高效的赋值?
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2020-9-10 10:59:26 | 只看该作者
do concurrent (i=1:n)
su(:,i) = u
end do

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

板凳
发表于 2020-9-10 21:24:53 | 只看该作者
li913 发表于 2020-9-10 10:59
do concurrent (i=1:n)
su(:,i) = u
end do

如果一定强调“每一行”的话,最后可以加
su = transpose(su)

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
地板
 楼主| 发表于 2020-9-11 11:09:21 | 只看该作者
风平老涡 发表于 2020-9-10 21:24
如果一定强调“每一行”的话,最后可以加
su = transpose(su)

如果不加会影响效率还是报错呢?

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

5#
发表于 2020-9-11 21:05:31 | 只看该作者
mmSCI 发表于 2020-9-11 11:09
如果不加会影响效率还是报错呢?

不影响也不报错。只不过是每一列sU含N个U元素。

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
6#
 楼主| 发表于 2020-9-12 10:34:06 | 只看该作者
风平老涡 发表于 2020-9-11 21:05
不影响也不报错。只不过是每一列sU含N个U元素。

懂了,这应该和初始赋值规则有关吧,如果是sU(:,i)=U就是sU是由U一列一列||构成的,如果是sU(i,:)=U就是sU是由U一行一行构成的=,我理解的没错吧

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

7#
发表于 2020-9-12 11:29:24 | 只看该作者
mmSCI 发表于 2020-9-12 10:34
懂了,这应该和初始赋值规则有关吧,如果是sU(:,i)=U就是sU是由U一列一列||构成的,如果是sU(i,:)=U就是s ...

对的。不过如果N值很大的话,用sU(i,:)=U 不是很高效,因为Fortran数组在内存中是按列存放的。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-26 11:51

Powered by Tencent X3.4

© 2013-2024 Tencent

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