Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Nimfa的稀疏矩阵分解对于隐式零非常缓慢_Python_Scipy_Sparse Matrix_Factorization - Fatal编程技术网

Python 使用Nimfa的稀疏矩阵分解对于隐式零非常缓慢

Python 使用Nimfa的稀疏矩阵分解对于隐式零非常缓慢,python,scipy,sparse-matrix,factorization,Python,Scipy,Sparse Matrix,Factorization,我试图用python库分解非常大的矩阵。 由于矩阵太大,我无法在内存中以一种新的格式实例化它,所以我使用 该库有一个名为的稀疏矩阵函数,这似乎就是我要寻找的 在试用时,我遇到了严重的因式分解性能问题(不是内存表示,而是速度),我还不能将一个简单的10 x 95矩阵分解为稀疏矩阵 以下是我构建测试矩阵的方式: m1 = lil_matrix((10, 95)) for i in xrange(10): for j in xrange(95): if random.rando

我试图用python库分解非常大的矩阵。 由于矩阵太大,我无法在内存中以一种新的格式实例化它,所以我使用

该库有一个名为的稀疏矩阵函数,这似乎就是我要寻找的

在试用时,我遇到了严重的因式分解性能问题(不是内存表示,而是速度),我还不能将一个简单的10 x 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)
这就是我运行它的方式

t = time()
fctr = nimfa.mf(m1, 
              seed = "random_vcol", 
              rank = 2, 
              method = "snmf", 
              max_iter = 15, 
              initialize_only = True,
              version = 'r',
              eta = 1.,
              beta = 1e-4, 
              i_conv = 10,
              w_min_change = 0)
print numpy.shape(m1)
a =  nimfa.mf_run(fctr)
print a.coef()
print a.basis()
print time() - t
这似乎还没有结束。但如果我做m1.todense(),它会在几秒钟内完成。因为我无法实例化我的真实矩阵,这对我来说不是一个好的解决方案

我尝试过不同的scipy.sparse矩阵格式,但没有成功:csc_矩阵、csr_矩阵和dok_矩阵


我使用了错误的矩阵格式吗?snmf算法需要快速执行哪些矩阵运算?还有其他我忽略的错误吗

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


同时,numpy或scipy中是否有适合您需要的因式分解功能?

建议:这是一个开源软件包,您可以看看它的源代码,这可能会澄清一些问题。也许您可以尝试在