이 다음은 일반적인 개념으로 작동 할 수 있지만 당신은 많은 세부 사항을 파악해야 할 것 ... 먼저 자신을해야한다
>>> import scipy.sparse as sps
>>> a = sps.rand(10, 10, density=0.05, format='csr')
>>> a.toarray()
array([[ 0. , 0.46531486, 0.03849468, 0.51743202, 0. ],
[ 0. , 0.67028033, 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. , 0.9967058 ],
[ 0. , 0. , 0. , 0. , 0. ]])
>>> a.data
array([ 0.46531486, 0.03849468, 0.51743202, 0.67028033, 0.9967058 ])
>>> a.indices
array([1, 2, 3, 1, 4])
>>> a.indptr
array([0, 3, 4, 4, 5, 5])
그래서 a.data
비를 갖는다 : 0이 아닌 항목의 수, 길이의 하나의 행의 수를 더한 하나의 길이의 두 개의 어레이에 대한 모든 정보가 3 개 어레이에 저장된 CSR format, 익숙 0 개 항목, 행 주요 순서, a.indices
은 0이 아닌 항목의 해당 열 인덱스를 가지며 a.indptr
은 모든 행에 대한 데이터가 시작되는 다른 두 배열에 시작 인덱스가 있습니다. a.indptr[3] = 4
및 a.indptr[3+1] = 5
이므로, 네 번째 행의 0이 아닌 항목은 a.data[4:5]
이고 열 인덱스는 a.indices[4:5]
입니다.
그래서 당신은 디스크에서이 세 가지 배열을 저장하고 memmaps로 액세스하고 다음과 같이 다음 행이 N을 통해 해요 검색 할 수있는 수 :
ip = indptr[m:n+1].copy()
d = data[ip[0]:ip[-1]]
i = indices[ip[0]:ip[-1]]
ip -= ip[0]
rows = sps.csr_matrix((d, i, ip))
을 개념의 일반적인 증거로서 :
>>> c = sps.rand(1000, 10, density=0.5, format='csr')
>>> ip = c.indptr[20:25+1].copy()
>>> d = c.data[ip[0]:ip[-1]]
>>> i = c.indices[ip[0]:ip[-1]]
>>> ip -= ip[0]
>>> rows = sps.csr_matrix((d, i, ip))
>>> rows.toarray()
array([[ 0. , 0. , 0. , 0. , 0.55683501,
0.61426248, 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0.67789204, 0. , 0.71821363,
0.01409666, 0. , 0. , 0.58965142, 0. ],
[ 0. , 0. , 0. , 0.1575835 , 0.08172986,
0.41741147, 0.72044269, 0. , 0.72148343, 0. ],
[ 0. , 0.73040998, 0.81507086, 0.13405909, 0. ,
0. , 0.82930945, 0.71799358, 0.8813616 , 0.51874795],
[ 0.43353831, 0.00658204, 0. , 0. , 0. ,
0.10863725, 0. , 0. , 0. , 0.57231074]])
>>> c[20:25].toarray()
array([[ 0. , 0. , 0. , 0. , 0.55683501,
0.61426248, 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0.67789204, 0. , 0.71821363,
0.01409666, 0. , 0. , 0.58965142, 0. ],
[ 0. , 0. , 0. , 0.1575835 , 0.08172986,
0.41741147, 0.72044269, 0. , 0.72148343, 0. ],
[ 0. , 0.73040998, 0.81507086, 0.13405909, 0. ,
0. , 0.82930945, 0.71799358, 0.8813616 , 0.51874795],
[ 0.43353831, 0.00658204, 0. , 0. , 0. ,
0.10863725, 0. , 0. , 0. , 0.57231074]])
매트릭스가 어떻게 저장 되나요? 행렬의 어느 부분을 동시에 메모리에로드하고 싶습니까? 묻는대로 귀하의 질문은 답변을 넓히는 방법입니다 ... – Jaime