【问题标题】:How to efficiently add sparse matrices in Python如何在 Python 中高效地添加稀疏矩阵
【发布时间】:2011-06-01 17:30:01
【问题描述】:

我想知道如何在 Python 中高效地添加稀疏矩阵。

我有一个程序可以将一个大任务分解为多个子任务,并将它们分布在多个 CPU 上。每个子任务都会产生一个结果(一个 scipy 稀疏矩阵,格式为:lil_matrix)。

稀疏矩阵的尺寸是: 100000x500000 ,这是相当大的,所以我真的需要最有效的方法来将所有生成的稀疏矩阵相加成一个稀疏矩阵,使用一些 C 编译的方法或其他东西。

【问题讨论】:

  • 添加稀疏矩阵的一种简单有效的方法是将它们转换为稀疏三元组形式,连接三元组,然后再转换回稀疏列格式。
  • NumPy 中 lil_matrices 的矩阵加法是不是不够好?
  • 不,听起来还不错。其实这是我的问题。我只是不知道 lil_matrix 加法是如何工作的——我在 scipy 站点中找不到示例。如果可以请给我一个可以解决我的问题的例子

标签: python numpy scipy add sparse-matrix


【解决方案1】:

你试过最简单的计时方法吗?

matrix_result = matrix_a + matrix_b

文档警告这对于 LIL 矩阵可能会很慢,建议以下可能更快:

matrix_result = (matrix_a.tocsr() + matrix_b.tocsr()).tolil()

【讨论】:

  • 第二个对我来说更快。 matrix_result = numpy.array_a + sparse_matrix_b.tocsr(),相比于 matrix_result = numpy.array_a + sparse_matrix_b
  • A = lil_matrix((10000, 10000)) A[0, :100] = np.ones(100) A[1, :100] = np.ones(100) A[2, :100] = np.ones(100) A[100:300, 200] = np.ones((200,1)) A[100:300, 201] = np.ones((200,1)) A[ 100:300, 202] = np.ones((200,1)) A[100:300, 203] = np.ones((200,1)) B = lil_matrix((10000, 10000)) B[100, :50] = np.ones(50) B[101, :50] = np.ones(50) B[102, :50] = np.ones(50) B[100:200, 5000] = np.ones ((100,1)) B[100:200, 5001] = np.ones((100,1)) B[100:200, 5002] = np.ones((100,1)) 我试过这段代码第一个几乎快 4 倍
猜你喜欢
  • 2017-12-16
  • 2019-05-26
  • 2021-11-18
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 2020-12-07
相关资源
最近更新 更多