使用FORTRAN中的内部SUM函数跟踪数组

时间:2017-10-19 01:15:56

标签: arrays sum fortran

是否可以使用内在SUM函数来计算数组的轨迹(等级> 1)?

目前,我正在使用do循环来计算跟踪。

trace = 0.0d0
do i = 1, 10
  trace = trace + a(i,i)
end do

1 个答案:

答案 0 :(得分:4)

TL / DR :您的方法很好,请使用它。

稍长一点:

  1. 你可以使用一个掩码,但是它的可读性较低,速度较慢,而且更容易出错:

    sum(a, mask = &
       reshape((/ (mod(i, size(a, 1)+1) == 1, i=1, size(a)) /), &
       shape(a) ))
    
  2. 您可以使用隐含的do循环来创建仅包含对角元素的新临时数组:

    sum( (/ (a(i,i), i=1, size(a, 1)) /) )
    

    同样,这样效率较低,因为程序必须创建一个新数组,我认为它不比你的版本更具可读性。