2017-03-24 6 views
0

속도 제한 때문에 Python에서 Fortran으로 변환하려고합니다. (그래서 나는 f2py를 사용할 수있다.)Numpy 함수의 Fortran과 동일

문제는 코드에 Fortran 90에는 존재하지 않는 많은 NumPy 함수가 있다는 것입니다. 따라서 제 질문은 다음과 같습니다 : 적어도 일부를 구현하는 Fortran 라이브러리가 있습니까? Fortran의 NumPy 기능은 무엇입니까?

코드에서 사용해야하는 함수는 일반적으로 간단하므로 수동으로 변환 할 수 있습니다. 그러나 Fortran에서 그다지 많은 경험이 없기 때문에 휠을 다시 발명하지 않으려 고합니다. 중요한주의 사항을 모를 수도 있습니다.

어쨌든, 내가 필요로하는 기능 중 일부는 다음과 같습니다.

np.mean (with the axis parameter) 
np.std (with the axis parameter) 
np.roll (again with the axis parameter) 
np.mgrid 
np.max (again with axis parameter) 

아무 때 나 유용합니다. 나는 그들 모두를 대신 할만한 것을 찾지 않을 것이지만, 적어도 그들 중 일부가 이미 존재한다면 그것은 아주 좋을 것이다.

+0

이 함수들을 전체'numpy' 배열에 적용하고 있습니까? 또는 반복적으로 사용 하시겠습니까? 'numpy' 코드가 이미 이와 같은 함수를 잘 사용하고 있다면, Fortran이나 C (Cython을 통해)로 변환하면 그만큼 이득을 얻지 못할 수도 있습니다. – hpaulj

+0

@hpaulj NumPy 배열 전체에 사용하고 있지만, 전체가 제거 할 수없는 두 개의 큰 루프 안에 있습니다.그래서 Cython을 사용하는 것을 제외하고는 그 주위에 방법이 없다고 생각합니다. 그러나 지금 cython을 배울 시간은 없습니다. – TomCho

+0

파이썬 루프와는 달리 나쁜 것은 아닙니다. 파이썬 루프는 느리며 포트란 루프는 빠릅니다. 특수 함수가있는 경우 사용이 더 짧지 만 잘 최적화 된 (예 : 벡터화 된) 루프보다 실제로 빠르지는 않습니다. –

답변

1

난 gfortran로부터 절차의 고유 여기에서 제 1 기준으로
보기 합 (축 파라미터) https://gcc.gnu.org/onlinedocs/gfortran/Intrinsic-Procedures.html#Intrinsic-Procedures

  1. np.mean 유용하다는 것을 발견. 축 매개 변수가 있습니다. 여기

    result = sum(data, dim=axis)/size(data, dim=axis) 
    

    는 결과 데이터가 하나보다 작은 치수를 갖는다 : 사이즈와 조합하여 그 출력을 평균 할 수있다.
    (축 파라미터 다시)

  2. np.mgrid
  3. np.max (축 파라미터 다시)

  4. np.roll (축 파라미터)

  5. np.std IT는 dim 인수를 가지며, MAXVAL 참조.

NumPy에 해당하는 Fortran에 대해 알지 못합니다. Fortran의 표준 기반 어레이 기능은 "기본"라이브러리가 출현하지 않은 것입니다. 여러 이니셔티브하지만이 있습니다

  1. https://github.com/astrofrog/fortranlib
  2. http://fortranwiki.org/ "개인 과학 포트란 루틴의 컬렉션" "포트란 위키는 포트란 프로그래밍 언어 및 과학 컴퓨팅의 모든 측면을 논의하기위한 개방형 장소입니다."
  3. http://flibs.sourceforge.net/ "FLIBS - 포트란 모듈 집합"
  4. http://www.fortran90.org/ 현대 Fortran 용 일반 리소스. "파이썬 포트란 로제타 스톤"이 포함되어 있습니다
+0

내장 함수가 아니지만 여기에 제안 된 sum + size 콤보를 사용하여 평균 함수를 구현하는 경우 std를 1로 정의 할 수도 있습니다 예를 사용하여 - 라이너 평균 (데이터, dim = 축) - 평균 (데이터, dim = 축) ** std = sqrt ** 2)' – jabirali

+0

GNU Scientific Library에 대한 포트란 인터페이스도 있습니다 : https://www.lrz.de/services/software/mathematik/gsl/fortran/ –