문제
누가 누가 몇 번이나 이메일을 보낸 사람을 나타내는 정수 매트릭스가 있다고 가정 해 봅시다. 소셜 네트워크 분석을 위해 간단한 방향이없는 그래프를 만들고 싶습니다. 따라서 행렬을 이진 행렬로 변환하고 나중에 튜플 목록으로 변환해야합니다.
내 질문 : 10 진수 행렬을 이진 행렬로 줄이는 빠르고 편리한 방법이 있습니까?
그러한 :
26, 3, 0
3, 195, 1
0, 1, 17
:
1, 1, 0
1, 1, 1
0, 1, 1
해결책
적용하십시오 scipy.sign
매트릭스의 모든 셀에 기능합니다.
편집] cudos to SpeciousFool:
만약에 x
그러면 매트릭스입니다 scipy.sign(x)
이진 행렬을 제공합니다.
다른 팁
다음을 수행 할 수 있습니다.
>>> import scipy
>>> a = scipy.array((12, 0, -1, 23, 0))
array([12, 0, -1, 23, 0])
>>> (a != 0).astype(int)
array([1, 0, 1, 1, 0])
마법은 안에 있습니다 a != 0
부분. 배열에 부울 표현식을 적용 할 수 있으며 부울 배열을 반환합니다. 그런 다음 ints로 변환됩니다.
당신은 또한 이것을 시도 할 수 있습니다 :
>>>x,y = scipy.where(yourMatrix>0)
>>>yourMatrix[:,:] = 0
>>>yourMatrix[x,y] = 1
나는 이것이 또한 더 빨라질 것이라고 생각한다.
제휴하지 않습니다 StackOverflow