Scipy从坐标列表中快速初始化稀疏矩阵

时间:2013-09-11 09:37:54

标签: python numpy scipy

我想从矩阵坐标和值列表中初始化稀疏矩阵(如果重要的话,用于scipy minimum_spanning_tree)。

也就是说,我有:

coords - Nx2 array of coordinates to be set in matrix
values - Nx1 array of the values to set.

我尝试使用lil_matrix使用

创建此数组
A = lil_matrix((N,N))
A[coords[:,0],coords[:,1]] = values

这是无法忍受的缓慢。实际上,在数组上循环并将每个元素设置为一个更快。即:

for i in xrange(N):
  A[coords[i,0],coords[i,1]] = values[i]

比上面稍快,但不多。因为数组太大,所以创建NxN数组,设置值然后转换为稀疏不是一种选择。

有没有更好的方法可以做到这一点,还是我坚持认为这是我算法中最慢的一部分?

1 个答案:

答案 0 :(得分:6)

LIL矩阵可怕慢,因为它的构造算法需要二次时间。我不明白为什么SciPy文档仍然推荐它。

构建矩阵的最简单方法是使用COO(坐标)格式,它似乎完全符合您的输入数据:

A = coo_matrix((values, coords.T))