gpt4 book ai didi

矩阵和向量的 Fortran 逐元素乘法

转载 作者:行者123 更新时间:2023-12-04 02:41:11 24 4
gpt4 key购买 nike

有没有一种简单快捷的方法可以将矩阵的列与向量的元素相乘。我们可以明确地做到这一点,

program test
integer :: x(3,3), y(3), z(3,3)
x = reshape([(i,i=1,9)],[3,3])
y = [1,2,3]
do i=1,3
z(:,i) = x(:,i) * y(i)
print *, z(:,i)
enddo
end program test

有没有办法在一行中执行 do 循环。例如,在 Numpy python 中,我们可以一次性完成这项工作

z = np.einsum('ij,i->ij',x,y)
#or
z = x*y[:,None]

最佳答案

尝试

z = x * spread(y,1,3)

如果这不起作用(这台计算机上没有 Fortran,所以我还没有检查)摆弄 spread 直到它起作用。在实践中,您可能希望将 3 替换为 size(x,1) 或类似内容。

我预计这会导致编译器创建临时数组。而且我希望很容易找到它在问题中表现不佳的显式循环方案的情况。 “整洁”的单行通常在时间和空间上都有成本。通常值得信赖的显式循环的 Fortran 方法是可以使用的方法。

关于矩阵和向量的 Fortran 逐元素乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59269264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com