fortran unformatted file --> read in python by 바죠

fortran unformatted file --> read in python
최근 인공지능, 기계학습, 딥러닝, 빅 데이터 처리가 중요해 지고 있다.
IoT 시대에는 보다 많은 정보가 나타날 것으로 판단한다.
기계학습에서 다루는 데이터의 크기는 매우 큰 것들이다. 특히, 딥러닝의 경우는 더욱더 그렇다.
따라서, 데이터 처리는 정말로 특별한 장치가 필요하다. 바이너리 파일 취급이 필수적이다.
기본적으로 아스키 파일을 사용하면 곤란해질 수 있다.
많은 예제 데이터를 만들어 낼 경우, 컴퓨터 프로그래밍 언어 파이썬은 정답이 아닐 수 있다.
이 경우 포트란 또는 C를 활용해야 한다. 당연하게도 데이터는 바이너리 파일로 저장해야만 한다.
이렇게 저장된 바이너리 파일은 파이썬에서 바이너리 형식으로 읽어져야만 한다.
데이터 읽는 시간이 너무 많은 비중을 차지하게 된다.
이 부분을 효율적으로 처리하는 특단의 대책이 필요하다.
전체 파이썬 계산의 효율성을 극대화 할 수 있다.
다른 방식으로 파일 처러를 하면 안 된다.
예를 들어, 예제들의 갯수가 200000인 경우, 통상적인 파일로 읽어 드릴 경우, 매우 오랜 시간이 소요된다.

------------------------------------------------------------------------------------------------------
cat a.f90
!234567890
       implicit none
       integer i,j,nn
       real*8 rdata(10,10)

       nn=10
       rdata=0.d0
       do i=1,nn
       do j=1,10
       rdata(j,i)=i+0.0001d0*j
       enddo
       enddo
       open(11,file='fort.11',form='unformatted')
       write(11) nn
       do i=1,nn
       write(11) (rdata(j,i),j=1,10)
       enddo
       close(11)
       stop
       end


------------------------------------------------------------------------------------------------------
import numpy as np
from scipy.io import FortranFile
f=FortranFile('fort.11','r')
i=f.read_ints(dtype=np.int32)
print(i)
#print(i[0])
data=f.read_reals(dtype=np.float64)
print(data)
#print(data[0])
data=f.read_reals(dtype=np.float64)
#print(data[0])
print(data)

python a.py
[10]
[1.0001 1.0002 1.0003 1.0004 1.0005 1.0006 1.0007 1.0008 1.0009 1.001 ]
[2.0001 2.0002 2.0003 2.0004 2.0005 2.0006 2.0007 2.0008 2.0009 2.001 ]

------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------




덧글

댓글 입력 영역

최근 포토로그



MathJax