使用lil_矩阵的python性能瓶颈
我目前正在python中使用稀疏矩阵。我选择使用lil_矩阵来解决我的问题,因为正如文档中所解释的,lil_矩阵用于构造稀疏矩阵。我的稀疏矩阵的维数为2500x2500 我在两个循环(在矩阵元素中迭代)中有两段代码,它们的执行时间不同,我想了解原因。第一个是使用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 基本上就是把矩阵的每一个元素加一。 第二个是如下所
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秒。但是我仍然认为差别很大。