如何对向量中除我们选择的元素之外的所有元素求和?
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
我的 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