2013-06-01 5 views
0

sklearn bag-of-words 벡터 라이저의 희소 행렬이 있습니다. 그것은 csr_matrix이고 그 요소는 문서의 단어 빈도를 나타냅니다. 하지만 지금 내가 필요로하는 것은 0/1 행렬입니다. 여기서 1은 문서에있는 단어를 나타내므로 실제 주파수는 신경 쓰지 않습니다. 배경 문제를 무시 , 이렇게하는 거예요 내가 스파 스 매트릭스가, 정수 값 희소 행렬을 0/1 값 희소 행렬로 변환하는 방법, Python

2 3 4 0 0 0 
0 0 0 0 0 8 
0 0 0 2 0 0 
0 0 0 0 0 0 

내가 모든 제로가 아닌 요소가 하나가되고 싶어요,

1 1 1 0 0 0 
0 0 0 0 0 1 
0 0 0 1 0 0 
0 0 0 0 0 0 

내가 어떻게 이것을 달성 할 수 있습니까? 나는 todense()를 사용한다고 가정하고 스파 스 매트릭스가 크기 때문에 루프가 좋은 선택이 아닙니다. 더 좋은 방법이 있습니까?

답변

1

시도 csr_matrix.sign. 그것은 정확히 당신이 필요로하는 것입니다 (비록 내가 직접 시도하지 않았 음).

+0

고마워요! 작동했습니다. –

1

난 그냥 0이 아닌 인덱스 (참조 scipy.sparse.csr_matrix 참조)에서 새 매트릭스를 만들 수있을 것 같아요. 당신의 희소 행렬을 가정하면 sp_m 이름 : 다른 사용자가 지적

sp_unit = csr_matrix(([1]*len(sp_m.data), sp_m.nonzero()), shape=sp_m.shape) 

또는

, 당신은 서명 기능을 사용할 수 있습니다; 그러나 음수 값을 사용하면 값을 구할 필요가 있다고 생각합니다.

sp_unit = sp_m.sign.multiply(sp_m.sign) 
+0

자세한 답변을 해주셔서 감사합니다! .sign() 내 문제가 해결 된 것 같습니다 –

+0

스파 스 매트릭스에 음수 값이있는 경우 .sign()을 사용하면 -1로 변환됩니다. 일반적인 경우에 0과 1을 원하면 위와 같이 .multiply와 함께 .sign을 사용하십시오. – bcorso

관련 문제