是否可以使用内在SUM函数来计算数组的轨迹(等级> 1)?
目前,我正在使用do循环来计算跟踪。
trace = 0.0d0
do i = 1, 10
trace = trace + a(i,i)
end do
答案 0 :(得分:4)
TL / DR :您的方法很好,请使用它。
稍长一点:
你可以使用一个掩码,但是它的可读性较低,速度较慢,而且更容易出错:
sum(a, mask = &
reshape((/ (mod(i, size(a, 1)+1) == 1, i=1, size(a)) /), &
shape(a) ))
您可以使用隐含的do循环来创建仅包含对角元素的新临时数组:
sum( (/ (a(i,i), i=1, size(a, 1)) /) )
同样,这样效率较低,因为程序必须创建一个新数组,我认为它不比你的版本更具可读性。