2013-07-19 263 views
5

我在Python中使用numpy,scipy和scikit-learn模块。计算稀疏矩阵的相似度

我想分类非常大的稀疏矩阵阵列。 (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

这使我怀疑,这将有可能只是使整个矩阵非稀疏,因为所有的值都为0或者1个,所以不是每个浮点64位,你只使用一位? (我知道这并不能解决你的问题,但是你的问题让我想出了这个问题) – usethedeathstar

+0

你想计算什么样的相似性?为什么你需要稀疏矩阵,而不是仅仅使用索引?那么像len(set(a)&set(b))/ float(len(a))这样简单的东西呢? –

+0

实际上,我想将这些数组从相似性中分组出来。例如,[1,1,1,0]更像[1,1,0,0],但与[0,0,0,1]相反。由于列和行的数量很大。我不知道是否有任何方法可以更快地完成。 –

回答

3

如果你选择了稀疏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) 
+0

有可能用scipy制作一个非方形的稀疏矩阵吗? –

+0

我从来没有尝试过...现在我在手机...你可以尝试它传递一个更多的索引数组和定义形状与多元组中的一个整数... –

+0

@Jimmy你试过这里提出的是什么?只要让我知道,如果你需要......别的...... –