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

Sha*_*ala 2 arrays fortran sum

是否可以使用内部 SUM 函数来计算数组(秩 > 1)的迹线?

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

trace = 0.0d0
do i = 1, 10
  trace = trace + a(i,i)
end do
Run Code Online (Sandbox Code Playgroud)

chw*_*w21 6

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

稍微长一点:

  1. 您可以使用掩码,但它的可读性较差、速度较慢且更容易出错:

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

    sum( (/ (a(i,i), i=1, size(a, 1)) /) )
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 我想我们都同意的是,OPs 方法是最简单、最快、最容易理解的计算轨迹的方法,他们应该继续使用它。 (4认同)