2009-10-06 2 views
2

Предположим, у меня есть целочисленная матрица, которая представляет, кто отправил по электронной почте, кто и сколько раз. Для анализа социальной сети я хотел бы сделать простой неориентированный граф. Поэтому мне нужно преобразовать матрицу в двоичную матрицу, а затем в список кортежей.Преобразование десятичной матрицы в двоичную матрицу в SciPy

Мой вопрос: существует ли быстрый и удобный способ уменьшения десятичной матрицы до двоичной матрицы.

Такой, что:

26, 3, 0 
3, 195, 1 
0, 1, 17 

становится:

1, 1, 0 
1, 1, 1 
0, 1, 1 

ответ

2

Применить функцию scipy.sign для каждой ячейки в матрице.

[EDIT] Cudos в speciousfool:

Если x ваша матрица, то scipy.sign(x) дает бинарную матрицу.

+0

Если х ваша матрица, то: scipy.sign (х) дает бинарную матрицу. – speciousfool

2

Вы можете сделать следующее:

>>> 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.

1

Вы также можете попробовать это:

>>>x,y = scipy.where(yourMatrix>0) 
>>>yourMatrix[:,:] = 0 
>>>yourMatrix[x,y] = 1 

я предполагаю, что это также будет быстрее.

Смежные вопросы