Fortran Coder

查看: 77|回复: 6

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

[复制链接]

24

帖子

8

主题

0

精华

入门

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

使用道具 举报

565

帖子

1

主题

0

精华

大宗师

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

57

帖子

2

主题

0

精华

专家

F 币
391 元
贡献
170 点

规矩勋章

发表于 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)

24

帖子

8

主题

0

精华

入门

F 币
98 元
贡献
65 点
 楼主| 发表于 2020-9-11 11:09:21 | 显示全部楼层
风平老涡 发表于 2020-9-10 21:24
如果一定强调“每一行”的话,最后可以加
su = transpose(su)

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

57

帖子

2

主题

0

精华

专家

F 币
391 元
贡献
170 点

规矩勋章

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

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

24

帖子

8

主题

0

精华

入门

F 币
98 元
贡献
65 点
 楼主| 发表于 2020-9-12 10:34:06 | 显示全部楼层
风平老涡 发表于 2020-9-11 21:05
不影响也不报错。只不过是每一列sU含N个U元素。

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

57

帖子

2

主题

0

精华

专家

F 币
391 元
贡献
170 点

规矩勋章

发表于 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数组在内存中是按列存放的。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-9-27 08:36

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

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