Fortran Coder

查看: 12084|回复: 6

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

[复制链接]

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
发表于 2020-9-10 10:55:29 | 显示全部楼层 |阅读模式
有一个一维数组U包含N个元素,和二维数组sU N*N个元素,需要把U赋值给sU的每一行,如何快速高效的赋值?

803

帖子

2

主题

0

精华

大宗师

F 币
3811 元
贡献
2276 点
发表于 2020-9-10 10:59:26 | 显示全部楼层
do concurrent (i=1:n)
su(:,i) = u
end do

213

帖子

2

主题

0

精华

宗师

F 币
2126 元
贡献
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 币
2126 元
贡献
875 点

规矩勋章

发表于 2020-9-11 21:05:31 | 显示全部楼层
mmSCI 发表于 2020-9-11 11:09
如果不加会影响效率还是报错呢?

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

33

帖子

12

主题

0

精华

熟手

F 币
138 元
贡献
93 点
 楼主| 发表于 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 币
2126 元
贡献
875 点

规矩勋章

发表于 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-5-25 22:16

Powered by Tencent X3.4

© 2013-2024 Tencent

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