Arrays FORTRAN中使用内部和函数的数组跟踪
是否可以使用内在和函数来计算数组(秩>1)的轨迹 目前,我正在使用do循环来计算跟踪Arrays FORTRAN中使用内部和函数的数组跟踪,arrays,sum,fortran,Arrays,Sum,Fortran,是否可以使用内在和函数来计算数组(秩>1)的轨迹 目前,我正在使用do循环来计算跟踪 trace = 0.0d0 do i = 1, 10 trace = trace + a(i,i) end do TL/DR:您的方法很好,请使用它 稍长: 您可以使用掩码,但其可读性较差、速度较慢且更容易出错: sum(a, mask = & reshape((/ (mod(i, size(a, 1)+1) == 1, i=1, size(a)) /), & shape(a)
trace = 0.0d0
do i = 1, 10
trace = trace + a(i,i)
end do
TL/DR:您的方法很好,请使用它 稍长:
sum(a, mask = &
reshape((/ (mod(i, size(a, 1)+1) == 1, i=1, size(a)) /), &
shape(a) ))
sum( (/ (a(i,i), i=1, size(a, 1)) /) )
同样,这是效率较低的,因为程序必须创建一个新的数组,我不认为它比您的版本更可读我想您可以使用
MASK
参数,这将要求您生成一个仅在对角线上为.TRUE.
的掩码。这就是说,创建掩码本身可能也需要一个DO
循环。您甚至可以使用中的方法。如果您重复执行该操作,可能会很有用。你可以只制作一次面具。即使是预先制作的面具也会很慢。矩阵越大,情况就越糟。我想我们都同意OPs方法是计算轨迹最简单、最快、最容易理解的方法,他们应该继续使用它。