使用Nimfa进行稀疏矩阵分解时隐式零元非常缓慢

2024-06-16 10:05:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python库Nimfa分解非常大的矩阵。 由于矩阵太大,我无法在内存中以dence格式实例化它,所以我使用scipy.sparse.csr_matrix。在

这个库有一个名为Snmf: Sparse Nonnegative Matrix Factorization (SNMF)的稀疏矩阵函数,这似乎就是我要找的。在

在试用时,我在因子分解方面遇到了严重的性能问题(不是内存表示,而是在速度上),我还不能将一个简单的10×95矩阵分解为稀疏矩阵。在

这就是我构建测试矩阵的方法:

m1 = lil_matrix((10, 95))
for i in xrange(10):
    for j in xrange(95):
        if random.random() > 0.8: m1[i, j] = 1
m1 = csc_matrix(m1)

我就是这样运行的

^{pr2}$

这似乎根本没有结束。但是如果我做m1.todense(),它在几秒钟内就结束了。因为我不能实例化我的真实矩阵,这对我来说不是一个好的解决方案。在

我尝试过不同的稀疏稀疏矩阵格式,但无效:csc_矩阵、csr_矩阵和dok_矩阵。在

我是否使用了错误的矩阵格式?snmf算法需要什么样的矩阵运算才能快速执行?还有什么我忽略的错误吗?在


Tags: 实例内存infor格式错误矩阵random
1条回答
网友
1楼 · 发布于 2024-06-16 10:05:34

我做了一些挖掘,在他们稀疏的实现中似乎有一个bug。它是什么,我不知道,但是如果你看一下line 289in_spfcnlls len(f_set)永远不会减少,循环永远运行。当矩阵不稀疏时,就不调用该方法。我在github存储库here上打开了一个问题。在

同时,numpy或scipy中是否有一个因子分解函数可以满足您的需求?在

相关问题 更多 >