Fortran 90/95中的广播数组乘法

Yux*_*ang 5 arrays fortran fortran90

我想知道在Fortran中有更好(简洁)的方法来编写代码吗?我试图将a(3, 3)每个值乘以每个值b(3).我知道在Python中有np.multiply,但不确定Fortran.

!!! test.f90
program test
    implicit none
    integer, parameter :: dp=kind(0.d0)
    real(dp) :: a(3, 3)=reshape([1, 2, 3, 4, 5, 6, 7, 8, 9], [3, 3]),&
        b(3)=[1, 2, 3]
    integer :: i
    do i = 1, 3
        a(:, i) = a(:, i) * b(i)
    end do
    write(*, *) a
end program test
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Hig*_*ark 5

表达方式

a * SPREAD(b,1,3)
Run Code Online (Sandbox Code Playgroud)

将产生与循环相同的结果.我会留给你和其他人来判断这是否比循环更简洁或更好.