在SciPy中将十进制矩阵转换为二进制矩阵

2 投票
3 回答
5004 浏览
提问于 2025-04-15 14:50

假设我有一个整数矩阵,这个矩阵表示谁给谁发过邮件,以及发了多少次。为了进行社交网络分析,我想制作一个简单的无向图。所以我需要把这个矩阵转换成二进制矩阵,然后再转换成一个元组列表。

我的问题是:有没有快速方便的方法可以把这个十进制矩阵转换成二进制矩阵。

比如:

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

变成:

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

3 个回答

1

你也可以试试这个:

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

我想这样做也会更快。

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 这一部分。你可以把布尔表达式(也就是判断对错的表达式)应用到数组上,这样就会得到一个布尔值的数组。接着,这个布尔值数组会被转换成整数。

2

对矩阵中的每个单元格使用 scipy.sign 函数。

[编辑] 感谢 speciousfool:

如果 x 是你的矩阵,那么 scipy.sign(x) 会给你一个二进制矩阵。

撰写回答