计算稀疏矩阵的相似度

6
我正在使用带有numpy、scipy和scikit-learn模块的Python。
我想要对非常大的稀疏矩阵(100,000 * 100,000)中的数组进行分类。
矩阵中的值等于0或1。我唯一拥有的是值为1的索引。
a = [1,3,5,7,9] 
b = [2,4,6,8,10]

这意味着。
a = [0,1,0,1,0,1,0,1,0,1,0]
b = [0,0,1,0,1,0,1,0,1,0,1]

我该如何在scipy中将索引数组转换为稀疏数组?

有什么快速分类这些数组的方法吗?

非常感谢。


这让我想到,是否有可能将整个矩阵都变成非稀疏矩阵呢?毕竟所有的值都是0或1,所以不需要每个浮点数使用64位,只需要每个值使用一位即可。虽然这并不能解决你的问题,但你的问题启发了我提出这个问题。 - usethedeathstar
你想计算什么样的相似度?为什么需要稀疏矩阵,而不是只使用索引?如果只是简单的 len(set(a) & set(b)) / float(len(a)) 这样的方法怎么样? - w-m
实际上,我想根据相似性对这些数组进行分组。例如,[1,1,1,0]更像是[1,1,0,0]但与[0,0,0,1]相反。由于列数和行数很大,我不知道是否有任何方法可以更快地完成它。 - Jimmy Lin
你尝试了多少组 - 10 x 10k,100 x 1k?你看过scikit-learn clustering吗? - denis
1个回答

4
如果您选择稀疏的coo_matrix,您可以通过传递索引来创建它,例如:
from scipy.sparse import coo_matrix
import scipy
nrows = 100000
ncols = 100000
row = scipy.array([1,3,5,7,9])
col = scipy.array([2,4,6,8,10])
values = scipy.ones(col.size)
m = coo_matrix((values, (row,col)), shape=(nrows, ncols), dtype=float)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接