6

我想从矩阵坐标和值的列表中初始化一个稀疏矩阵(如果重要的话,可以与 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

这是令人难以忍受的缓慢。实际上,循环遍历数组并一次将每个元素设置一个会更快。IE:

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

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

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

4

1 回答 1

6

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

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

A = coo_matrix((values, coords.T))
于 2013-09-11T09:52:15.590 回答