2014-03-02 2 views
0

여기 코드 조각이 있는데이 코드 조각을 포트란 95에 맞게 변환하는 효율적인 방법을 생각할 수 없습니다. 나는 여러 가지를 이미 시도했지만 매트릭스와 다른 방법으로 1D 배열을 만들려고 항상 노력하고있다. (요점은 계산 시간을 줄이는 것이며, 변환하면 루프를 사용하는 것보다 다른 방법을 생각할 수 없다는 것이다. 다시 : /).포트란 77에서 포트란 95로 변환

do i=1,dim 
do j=1,dim 
    Snorm(i,j)=Sval(j)/Sval(i) 
    Bnorm(i,j)=Bval(j)/Bval(i) 
    Pnorm(i,j)=Pval(j)/Pval(i) 
enddo 
enddo 

가 어떻게 Fortran95 코드에 있음을 작성합니다

이 코드의 조각?

는 R 행렬의 계산의 상당이있다 :

Snorm <- t(Sval %*% t(1/Sval)) 
Bnorm <- t(Bval %*% t(1/Bval)) 
Pnorm <- t(Pval %*% t(1/Pval)) 

파이썬 그것의 등가물이있다 :

Snorm = (numpy.dot((Svalmat.T),(1/Svalmat))).T 
Bnorm = (numpy.dot((Bvalmat.T),(1/Bvalmat))).T 
Pnorm = (numpy.dot((Pvalmat.T),(1/Pvalmat))).T 

with Svalmat etc the equivalent of Sval, but then columnmatrix 

누구나 생각 하였는가?

답변

5

제 생각에는 변할 가치가 없습니다. 유효한 포트란 95입니다. 특히 목표가 계산 시간 인 경우. 서브 어레이가있는 "똑똑한"트릭은 배열 임시 변수를 도입 할 수 있습니다.

명백한 시도는 forall 또는

forall(i=1:dim, j=1:dim) 
    Snorm(i,j)=Sval(j)/Sval(i) 
    Bnorm(i,j)=Bval(j)/Bval(i) 
    Pnorm(i,j)=Pval(j)/Pval(i) 
end forall 

do concurrentdo concurrent와 동일합니다.

원래 루프 순서는 아마도 효율적이지 않을 수 있습니다.

+0

고마워요! 이미 (루프의 순서를 변경하여)보다 효율적입니다. – user3365108