Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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
使用lil_矩阵的python性能瓶颈_Python_Scipy_Sparse Matrix - Fatal编程技术网

使用lil_矩阵的python性能瓶颈

使用lil_矩阵的python性能瓶颈,python,scipy,sparse-matrix,Python,Scipy,Sparse Matrix,我目前正在python中使用稀疏矩阵。我选择使用lil_矩阵来解决我的问题,因为正如文档中所解释的,lil_矩阵用于构造稀疏矩阵。我的稀疏矩阵的维数为2500x2500 我在两个循环(在矩阵元素中迭代)中有两段代码,它们的执行时间不同,我想了解原因。第一个是 current = lil_matrix_A[i,j] lil_matrix_A[i, j] = current + 1 lil_matrix_A[j, i] = current + 1 基本上就是把矩阵的每一个元素加一。 第二个是如下所

我目前正在python中使用稀疏矩阵。我选择使用lil_矩阵来解决我的问题,因为正如文档中所解释的,lil_矩阵用于构造稀疏矩阵。我的稀疏矩阵的维数为2500x2500

我在两个循环(在矩阵元素中迭代)中有两段代码,它们的执行时间不同,我想了解原因。第一个是

current = lil_matrix_A[i,j]
lil_matrix_A[i, j] = current + 1
lil_matrix_A[j, i] = current + 1
基本上就是把矩阵的每一个元素加一。 第二个是如下所示

value = lil_matrix_A[i, j]
temp = (value * 10000) / (dictionary[listA[i]] * dictionary[listB[j]])
lil_matrix_A[i, j] = temp
lil_matrix_A[j, i] = temp
基本上取这个值,计算一个公式,然后将这个新值插入矩阵。 第一段代码执行约0.4秒,第二段代码执行约32秒。 我知道第二个在中间有一个额外的计算,但是在我看来,时差是没有意义的。字典和列表索引具有O(1)复杂性,因此它不应该是一个问题。是否有任何迹象表明是什么导致了执行时间的差异


注意:列表和字典中的元素数也是2500。

您能提供一些可复制的可运行代码吗?你的分析器怎么说?你在迭代矩阵的每个元素吗?不只是现在的非零吗?如果是这样,为什么要使用稀疏矩阵?为什么不是普通的密集型呢?(25002500)对于密集阵列来说不是那么大。@hpaulj不,我不是。基本上,第一段代码是矩阵的构造,之后的大多数值都是0。第一个代码的循环逻辑有点复杂,所以我在这里尽量保持简单。但是如果这有帮助的话,它甚至可能在第一段代码中比在第二段代码中有更多的迭代。另一方面,我刚刚更改了第二段代码,从计算中跳过了等于0的值,并且我从32秒改进到了9秒。但是我仍然认为差别很大。