我想知道在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
提前致谢!
答案 0 :(得分:5)
表达式
a * SPREAD(b,1,3)
将产生与循环相同的结果。我会留给你和其他人来判断这是否比循环更简洁或更好。
答案 1 :(得分:3)
do循环可以使用FORALL替换为单行:
forall (i=1:3) a(:, i) = a(:, i) * b(i)
答案 2 :(得分:1)
如果您经常重复使用特定的b,您可以定义:
b(3, 3)=reshape([1, 1, 1, 2, 2, 2, 3, 3, 3], [3, 3])
那么你就可以做到:
a=a*b
...