2017-12-04 4 views
0

정수형 키를 사용하여 dictscipy.sparse.csr_matrix 개체를 값으로 사용합니다. 어떻게 이것을 별도의 파일에 저장할 수 있습니까?scipy sparse csr 행렬 사전을 저장하고로드하는 방법은 무엇입니까?

내가 각 항목에 대해 정기적 ndarray이 있다면, 그때 json으로 직렬화 수 있지만, 나는 희소 행렬로 이것을하려고하면

TypeError: <75x75 sparse matrix of type '<type 'numpy.int64'>' with 10 stored elements in Compressed Sparse Row format> is not JSON serializable

:

with open('filename.txt', 'w') as f: 
      f.write(json.dumps(the_matrix)) 

나는 형식 오류를 얻을 수

정수 및 키가 작은 csr 행렬 키를 사용하여 사전을 어떻게 저장할 수 있습니까?

답변

0

Newer scipy 버전은 scipy.sparse.save_npz 기능 (및 해당로드)이 있습니다. 스파 스 매트릭스의 속성을 numpysavez zip 아카이브에 저장합니다. csr의 경우에는 data, indicesindptr 개의 배열과 모양을 저장합니다.

scipy.io.savemat은 MATLAB 호환 형식 (csc)으로 스파 스 매트릭스를 저장할 수 있습니다. 스파 스 매트릭스를 처리 할 수있는 하나 또는 두 개의 다른 scipy.io 형식이 있지만 이들과 함께 작업하지는 못했습니다.

스파 스 매트릭스에는 배열 수가 적은 배열이 포함되어 있지만 배열 하위 클래스가 아니기 때문에 numpy 함수는 직접 사용할 수 없습니다.

numpy 배열에 대한 pickle 방법은 np.save입니다. 그리고 객체를 포함하는 배열은 pickle을 사용합니다 (가능한 경우). 따라서 배열 사전의 피클이 작동해야합니다.

희박한 dok 형식은 dict의 하위 클래스이므로 피클 할 수 있습니다. json과 함께 작동 할 수도 있습니다. 그러나 나는 그것을 시도하지 않았다.

In [427]: json.dumps(np.arange(5)) 
TypeError: array([0, 1, 2, 3, 4]) is not JSON serializable 
In [428]: json.dumps(np.arange(5).tolist()) 
Out[428]: '[0, 1, 2, 3, 4]' 

dok

중 하나가 작동하지 않습니다 그런데

, 일반 NumPy와 배열은 하나 jsoned 수 없습니다. 키는

In [433]: json.dumps(M.todok()) 
TypeError: keys must be a string 

MatrixMarket

스파 스 처리하는 텍스트 형식, 인덱스의 튜플 있습니다

In [444]: io.mmwrite('test.mm', M) 
In [446]: cat test.mm.mtx 
%%MatrixMarket matrix coordinate integer general 
% 
1 5 4 
1 2 1 
1 3 2 
1 4 3 
1 5 4 
+0

덕분에 @hpaulj,하지만 난'json' 직렬화 객체, 내가 언급 한 언급 할 때 'dict'은 직렬화 가능합니다. numpy 배열의'dict'은 직렬화 될 수 있습니다. scipy sparse csr 행렬의'dict'은 할 수 없습니다. 나는 열쇠가 정수이고 값이 scipy 스파 스 csr 행렬 인'dict'을 저장하는 방법을 찾고있다. – StatsSorceress

+0

사전을 직렬화하려면 모든 값을 직렬화 할 수 있어야한다. 각 구성 요소 오브젝트에 대해 정의됩니다. – hpaulj

+0

그래, 희박한 행렬이 직렬화되지 않기 때문에 직렬화를 혼자 남겨 두자. 값이 직렬화되지 않는 dict을 어떻게 저장할 수 있습니까? – StatsSorceress