0이 많으므로 양식에 0이 아닌 요소 (색인, 숫자) 만 쓸 수 있습니다. 이제 당신은 단지 데이터의 수가 적은
In [11]: x, y = a.nonzero()
In [12]: zip(x,y)
Out[12]: [(3, 1), (7, 4), (9, 0)]
In [13]: nonzero = zip(x,y)
:
이
In [5]: a = np.zeros((10, 10))
In [6]: a
Out[6]:
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
In [7]: a[3,1] = 2.0
In [8]: a[7,4] = 17.0
In [9]: a[9,0] = 1.5
첫째, 흥미로운 숫자와 그들의 인덱스를 분리 :
하면 0이 아닌 숫자 소량의 배열이 있다고 가정 요소는 왼쪽.가장 쉬운 것은 텍스트 파일에 기록하는 것입니다
In [17]: with open('numbers.txt', 'w+') as outf:
....: for r, k in nonzero:
....: outf.write('{:d} {:d} {:g}\n'.format(r, k, a[r,k]))
....:
In [18]: cat numbers.txt
3 1 2
7 4 17
9 0 1.5
이 또한 당신에게 데이터를 안구 할 수있는 기회를 제공합니다. C++ 프로그램에서는 fscanf
으로이 데이터를 읽을 수 있습니다.
하지만 당신은 더 struct 사용하여 이진 데이터를 작성하여 크기를 줄일 수 있습니다 :
이
In [17]: import struct
In [19]: c = struct.Struct('=IId')
In [20]: with open('numbers.bin', 'w+') as outf:
....: for r, k in nonzero:
....: outf.write(c.pack(r, k, a[r,k]))
Struct
생성자에 대한 인수는 의미; 원시 날짜 형식 '='을 사용하십시오. 첫 번째 및 두 번째 데이터 요소는 부호없는 정수 'I'이고 세 번째 요소는 두 배 'd'입니다.
C++ 프로그램에서이 데이터는 바이너리 데이터로 포장 된 struct
으로 가장 잘 읽을 수 있습니다.
편집 : 2D 배열에 대한 답변이 업데이트되었습니다.
그냥 생각해보십시오. 작성해야합니까? 프로그램이 동시에 실행되는 경우 (또는 동시에 실행되도록 만들 수있는 경우) 여러 가지 방법 중 하나를 사용하여 데이터를 서로간에 스트리밍 할 수 있습니다. 명명 된 파이프, TCP 소켓, 공유 메모리 등 –