나는 이것이 sklearn
의 정규 작업이라고 생각하므로,이 작업을 수행하는 패키지 나 다른 SO 질문에 대한 답변이 있어야합니다. 올바른 태그를 추가해야합니다.
In [638]: A=np.array([('a','b'),('b','d'),('a','d'),('b','c'),('d','e')])
In [639]: A
Out[639]:
array([['a', 'b'],
['b', 'd'],
['a', 'd'],
['b', 'c'],
['d', 'e']],
dtype='<U1')
사용 np.unique
: N 행, 문자 값 2 열 - 샘플 2 차원 배열을 확인
을 :
그러나
그냥 내가 할 줄 것을
numpy
및
sparse
의 내 지식에서 작업 고유 한 문자열을 식별하고 해당 문자열에서 원래 배열로 매핑하는 보너스로 사용할 수 있습니다. 이것은 업무의 주역입니다.
In [640]: k1,k2,k3=np.unique(A,return_inverse=True,return_index=True)
In [641]: k1
Out[641]:
array(['a', 'b', 'c', 'd', 'e'],
dtype='<U1')
In [642]: k2
Out[642]: array([0, 1, 7, 3, 9], dtype=int32)
In [643]: k3
Out[643]: array([0, 1, 1, 3, 0, 3, 1, 2, 3, 4], dtype=int32)
나는 A
의 각 항목에 대해 행 안부를 확인하기 위해 그 inverse
배열을 바꿀 수 있습니다. 것과
In [644]: rows,cols=k3.reshape(A.shape).T
In [645]: rows
Out[645]: array([0, 1, 0, 1, 3], dtype=int32)
In [646]: cols
Out[646]: array([1, 3, 3, 2, 4], dtype=int32)
각 'intersection`에서 1
을 가지는 희소 행렬을 구축하기 위해 간단하다.
In [648]: M=sparse.coo_matrix((np.ones(rows.shape,int),(rows,cols)))
In [649]: M
Out[649]:
<4x5 sparse matrix of type '<class 'numpy.int32'>'
with 5 stored elements in COOrdinate format>
In [650]: M.A
Out[650]:
array([[0, 1, 0, 1, 0],
[0, 0, 1, 1, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]])
첫번째 행 a
은 2 · 4 COL, b
및 d
의 값을 갖는다. 등등. ============================
원래 내가했다 :
In [648]: M=sparse.coo_matrix((np.ones(k1.shape,int),(rows,cols)))
이 잘못 . data
배열은 모양이 rows
및 cols
과 일치해야합니다. k1
같은 크기가 있기 때문에 여기에 오류가 발생하지 않았습니다. 하지만 고유 한 값을 사용하면 오류가 발생할 수 있습니다.
====================
이 방식은 전체 데이터베이스의 경우, A
메모리에로드 할 수있는 것으로 가정합니다. unique
과 비슷한 메모리가 필요합니다. 초기에 coo
행렬은 매개 변수로 제공된 배열을 사용하기 때문에 메모리 사용량을 증가시키지 않을 수 있습니다.그러나 임의의 계산 및/또는 csr
또는 다른 형식으로의 변환은 추가 복사본을 만듭니다.
데이터베이스를 청크로로드하고 다른 구조를 사용하여 고유 한 값과 매핑을 얻는 방법으로 메모리 문제를 해결할 수 있습니다. 덩어리로 coo
행렬을 구성 할 수도 있습니다. 그러나 조만간 메모리 문제가 발생할 것입니다. scikit 코드는 그 희소 행렬의 복사본을 하나 이상 만들 것입니다.
고맙습니다. 먼저 행렬 전체를 읽지 않고이 작업을 수행 할 수 있습니까? 그것은 청크에 의한 청크입니다. – eleanora
정확하게 무엇을 원 하느냐에 따라 [이 답변]과 비슷한 것을 사용하여 청크로 파일 청크를 읽을 수 있습니다 (http://stackoverflow.com/questions/17056382/read-file-in-chunks-ram- 바이너리 파일로부터 usage-read-strings)를 찾아서 어떤 행과 열을 채워야하는지 찾아야한다. – Mahdi
나는이 문제가 http://stackoverflow.com/questions/38688062/converting-a-1-2gb-list-of-edges-into-a-sparse-matrix에서 작동하도록하는 것에 관한 후속 조치를 게시했다. – eleanora