2017-10-19 1 views
1

내장 SUM 함수를 사용하여 배열의 순위 (순위> 1)를 계산할 수 있습니까?FORTRAN의 내장 SUM 함수를 사용하는 배열 추적

현재 추적을 계산하기 위해 do 루프를 사용하고 있습니다.

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

'MASK' 매개 변수를 사용하면 대각선에서만'.TRUE '마스크를 생성해야합니다. 즉, 마스크 자체의 생성에는 아마도 'DO'루프가 필요할 것입니다. – chw21

+0

[이 답변] (https://stackoverflow.com/a/16204558/3157076)과 같은 방법을 사용할 수도 있습니다. – francescalus

답변

3

TL/DR : 당신있어서 잘, 즉을 사용한다.

약간 이상 :

  1. 당신은 마스크를 사용할 수 있지만, 그 경향이 더 느리게, 그리고 훨씬 더 많은 오류가 덜 읽을 수 :

    sum(a, mask = & 
        reshape((/ (mod(i, size(a, 1)+1) == 1, i=1, size(a)) /), & 
        shape(a))) 
    
  2. 당신이가 루프를 할 암시 사용할 수 있습니다 대각선 요소의 새로운 임시 배열을 만듭니다.

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

    다시 말하지만, 프로그램이 새로운 배열을 생성해야하기 때문에 여러분의 버전보다 읽기 쉽다고 생각하지 않습니다.

+0

은 작업을 반복적으로 수행하는 경우 유용 할 수 있습니다. 한 번 마스크를 만들 수 있습니다. – agentp

+0

미리 만들어진 마스크로도 느려질 것입니다. 행렬이 클수록 더 나 빠질 것입니다. –

+3

나는 우리 모두가 동의하는 것은 OPs 방법이 가장 간단하고, 빠르며, 추적 계산 방법을 이해하기 쉽다는 것이며, 계속 사용해야한다는 것입니다. – chw21

관련 문제