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)
TL/DR:你的方法很好,使用它。
稍微长一点:
您可以使用掩码,但它的可读性较差、速度较慢且更容易出错:
sum(a, mask = &
reshape((/ (mod(i, size(a, 1)+1) == 1, i=1, size(a)) /), &
shape(a) ))
Run Code Online (Sandbox Code Playgroud)您可以使用隐含的 do 循环来创建一个仅包含对角线元素的新临时数组:
sum( (/ (a(i,i), i=1, size(a, 1)) /) )
Run Code Online (Sandbox Code Playgroud)
同样,这效率较低,因为程序必须创建一个新数组,而且我不认为它比您的版本更具可读性。