2015-01-21 4 views
0

데이터 집합 (30,000 개 요소)에 대해 쌍방향 거리를 계산하는 매우 구체적인 방법을 사용하는 C++ 프로그램이 있습니다. 출력 파일 20 GB가,이 같은 보일 것이다 : 파이썬Python 스크립트로 C++ 프로그램 출력 링크

 
point1, point2, distancex 
pointi, pointj, distancexx 
..... 

그때 입력 파일을 클러스터링 파이썬 (NumPy와)를 사용합니다. 출력 파일을 읽는 데 영원히 파이썬을 사용합니다. 중간 파일의 I/O 시간을 절약하기 위해 Python 코드와 직접 C++ 프로그램을 연결하는 방법이 있습니까? SWIG를 사용하고 있을까요?

+2

파이프 라인을 사용할 수 있습니다 : en.wikipedia.org/wiki/Pipeline_(Unix) –

답변

0

나는 당신이 아스키를 저장했다고 가정합니다. 대신 C++ 코드를 수정하여 바이너리를 작성하고 numpy.fromfile으로 읽을 수 있습니다.

더 직접 연결하려면 swig를 사용하여 C++ 코드를 라이브러리로 포장 (main() 제거 및 Python에서 구동)하십시오. 이를 통해 C++과 Python 사이의 배열 메모리를 공유 할 수 있습니다.

파이썬의 buffer protocol은 C++ 측에서 파이썬 측의 numpy.frombuffer과 함께 사용할 수 있습니다. 또는 numpy headers을 사용하여 C++의 numpy 배열에서 직접 작업 할 수 있습니다. 두 번째 방법을 사용하는 작은 swig example project입니다. (면책 조항 : 썼습니다.)