我正在使用 csr_matrix((data, indices, indptr), shape=[row, col]) 方法创建一个 csr 矩阵。执行构造方法 csr_matrix() 比自己构建 data, indices, indptr 花费的时间多 4 倍多。既然我已经有了 (data, indices, indptr) 元组,那么构建 csr 矩阵难道不是很简单(而且很快)吗?

我的代码和时间统计是这样的:

data = ...  # 2.207s
indices = ...  # 11.065s
indptr = ...  # 0.047s
matrix = csr_matrix((data, indices, indptr), shape=(row, col))  # 57.806s

最佳答案

您传递的数组似乎很大,因此它们可能会被复制到某处,并且由此产生的内存问题导致速度变慢。

有几种方法可以复制您的数组。如果这些条件中的任何一个是错误的,您将产生副本:

  • indicesindptr 需要具有适当的索引 dtype。
  • 所有三个都需要是 numpy 数组 ( numpy.ndarray )
  • copy kwarg 需要是 False 。默认情况下它是假的,所以这不太可能是问题。
  • 关于python - 缓慢的CSR矩阵构建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31322599/

    10-11 16:29