2012-11-08 5 views
4

C++ 프로그램에서 읽을 수 있도록 해당 치수를 포함하여 파일에 2D numpy 배열을 작성하고 해당 배열을 작성해야합니다.크기가 numpy 인 배열을 이진 파일로 작성하십시오.

배열을 저장하는 간단한 코드를 작성했으며 C++에서 읽을 수 있지만 배열의 크기를 먼저 쓰려고하면 항상 오류가 발생합니다.

가 여기 내 간단한 파이썬 코드입니다 :

n1, n2 = V.shape 
file.write(n1) 
file.write(n2) 

를하지만 중 하나가 작동하지 않습니다

1 file = open("V.bin","wb") 
2 file.write(V.shape) 
3 file.write(V) 
4 file.close() 

두 번째 줄은 오류를 제공, 나는 또한 시도했습니다.

내가 오류를 추가 해요 그것을 보여줍니다

역 추적 (마지막으로 가장 최근 통화) : file.write가을 (V.shape [0]) 형식 오류 : 문자열 또는 버퍼를해야합니다,

을 int로하지

감사합니다.

+1

어떤 오류가 발생합니까? – Eric

+1

'file.write()'는 문자열이나 버퍼를 기대합니다. 'v.shape'는 튜플이며 인자로 전달하면'TypeError'가 발생합니다. –

답변

2

아스키로 저장하려면 numpy.savetext을 사용할 수 있습니다.

(이진 데이터를 처리하는 것처럼 보이기 때문에) 원시 데이터 스트림을 저장하려면 ndarray.tostring을 사용하여 파일에 직접 덤프 할 수있는 바이트 문자열을 가져올 수 있습니다.

이 방법의 장점은 자신 만의 파일 형식을 만들 수 있다는 것입니다. 단점은 실제로 파일에 쓰려면 문자열을 만들어야한다는 것입니다. 당신은 당신이 두 번째 줄에 오류가 있어요 말부터 f.write 문자열을 기대 때문에


는, 그것은 오류입니다. tuple 또는 int을 전달하려고합니다. struct.pack을 사용하여이 문제를 해결할 수 있습니다.

f.write(struct.pack('2i',*array.shape)) 
+0

감사합니다. 나는 이것을 대답으로 표시 할 것이다. – Lautaro

5

이진수로 저장하는 numpy.save()을 사용할 수 있습니다.

+3

다음은 .npy 사양 (https://github.com/numpy/numpy/blob/master/doc/neps/npy-format.txt)이므로 'save()'를 호출 한 후 C++ 코드에서 데이터를 해석 할 수 있습니다. '. –

+0

하지만 C++ 프로그램에서 행과 열의 수를 먼저 읽어야합니다. 그 정보는 저장하지 않습니까? – Lautaro

+0

@Lautaro NPY 형식 문서를 참조하십시오. – Bitwise

관련 문제