尽管所有东西似乎都已经向量化了,但以下代码运行速度仍然太慢。
问题似乎是索引操作作为 Python 函数实现的,调用
换句话说,Python函数
from numpy import *
from scipy.sparse import *
n = 100000;
i = xrange(n); j = xrange(n);
data = ones(n);
A=csr_matrix((data,(i,j)));
x = A[i,j]
问题似乎是索引操作作为 Python 函数实现的,调用
A[i,j]
导致以下分析输出。 500033 function calls in 8.718 CPU seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
100000 7.933 0.000 8.156 0.000 csr.py:265(_get_single_element)
1 0.271 0.271 8.705 8.705 csr.py:177(__getitem__)
(...)
换句话说,Python函数
_get_single_element
被调用了100000次,这非常低效。为什么不使用纯C实现呢?有没有人知道如何解决这个限制,并加速上述代码?
我应该使用不同的稀疏矩阵类型吗?
i,j
不沿对角线,并且矩阵不一定是对角线矩阵。 - D R