내장 SUM 함수를 사용하여 배열의 순위 (순위> 1)를 계산할 수 있습니까?FORTRAN의 내장 SUM 함수를 사용하는 배열 추적
현재 추적을 계산하기 위해 do 루프를 사용하고 있습니다.
trace = 0.0d0
do i = 1, 10
trace = trace + a(i,i)
end do
내장 SUM 함수를 사용하여 배열의 순위 (순위> 1)를 계산할 수 있습니까?FORTRAN의 내장 SUM 함수를 사용하는 배열 추적
현재 추적을 계산하기 위해 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)))
당신이가 루프를 할 암시 사용할 수 있습니다 대각선 요소의 새로운 임시 배열을 만듭니다.
sum((/ (a(i,i), i=1, size(a, 1)) /))
다시 말하지만, 프로그램이 새로운 배열을 생성해야하기 때문에 여러분의 버전보다 읽기 쉽다고 생각하지 않습니다.
'MASK' 매개 변수를 사용하면 대각선에서만'.TRUE '마스크를 생성해야합니다. 즉, 마스크 자체의 생성에는 아마도 'DO'루프가 필요할 것입니다. – chw21
[이 답변] (https://stackoverflow.com/a/16204558/3157076)과 같은 방법을 사용할 수도 있습니다. – francescalus