Fortran Coder

标题: 如何高效的将一维数组重复赋值给二维数组? [打印本页]

作者: mmSCI    时间: 2020-9-10 10:55
标题: 如何高效的将一维数组重复赋值给二维数组?
有一个一维数组U包含N个元素,和二维数组sU N*N个元素,需要把U赋值给sU的每一行,如何快速高效的赋值?

作者: li913    时间: 2020-9-10 10:59
do concurrent (i=1:n)
su(:,i) = u
end do
作者: 风平老涡    时间: 2020-9-10 21:24
li913 发表于 2020-9-10 10:59
do concurrent (i=1:n)
su(:,i) = u
end do

如果一定强调“每一行”的话,最后可以加
su = transpose(su)
作者: mmSCI    时间: 2020-9-11 11:09
风平老涡 发表于 2020-9-10 21:24
如果一定强调“每一行”的话,最后可以加
su = transpose(su)

如果不加会影响效率还是报错呢?
作者: 风平老涡    时间: 2020-9-11 21:05
mmSCI 发表于 2020-9-11 11:09
如果不加会影响效率还是报错呢?

不影响也不报错。只不过是每一列sU含N个U元素。
作者: mmSCI    时间: 2020-9-12 10:34
风平老涡 发表于 2020-9-11 21:05
不影响也不报错。只不过是每一列sU含N个U元素。

懂了,这应该和初始赋值规则有关吧,如果是sU(:,i)=U就是sU是由U一列一列||构成的,如果是sU(i,:)=U就是sU是由U一行一行构成的=,我理解的没错吧
作者: 风平老涡    时间: 2020-9-12 11:29
mmSCI 发表于 2020-9-12 10:34
懂了,这应该和初始赋值规则有关吧,如果是sU(:,i)=U就是sU是由U一列一列||构成的,如果是sU(i,:)=U就是s ...

对的。不过如果N值很大的话,用sU(i,:)=U 不是很高效,因为Fortran数组在内存中是按列存放的。




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