如何对向量中除我们选择的元素之外的所有元素求和?

How to sum all elements of a vector except the one we choose?

我的 IDE 是 Code::Blocks 20.03 (MinGW 9.2.0)

我的目的是学习如何在内部函数 sum 中使用 MASK 参数。

这是我的简单代码:

program vector
  
implicit none 

integer :: i
integer, dimension(3) :: vec_aa, vec_bb

do i = 1, 3
  
  vec_aa(i) = i + 1  

end do

!do i = 1, 3
  
 ! vec_bb(i) = sum( vec_aa, mask = ?????? )  

! end do

end program vector

有没有办法定义 MASK 以便我的函数对向量 vec_aa 的所有元素求和,索引为 i 的元素除外?

mask 需要是与 vec_aa 形状相同的逻辑数组。它的功能类似于 vec_aa 上的叠加层,这样只有那些元素 vec_aa(i) 会被评估,其中 mask(i) 评估为 .true..

对于您的问题,您可以通过使用隐含的 do 循环创建一个数组来轻松完成

program vector
  implicit none

  integer               :: i, j
  integer, dimension(3) :: vec_aa, vec_bb

  do i = 1, 3
    vec_aa(i) = i + 1
  end do
  print *, 'aa', vec_aa      

  do i = 1, 3
    vec_bb(i) = sum(vec_aa, mask = [(j /= i, j = 1, 3)])
  end do
  print *, 'bb', vec_bb
end program 

输出为

 aa           2           3           4
 bb           7           6           5