【问题标题】:transform symmetric matrix to sparse matrix将对称矩阵变换为稀疏矩阵
【发布时间】:2017-11-09 14:33:53
【问题描述】:

我有一个 numpy symmetric square matrix 我想变成一个稀疏的,到目前为止,我已经实现了以下解决方案,为简化起见,我使用以下命令构造了一个矩阵:

import numpy as np
adjacency_matrix = np.full((10, 10), 20.0)

然后将其处理为如下所示的稀疏:

nbr_lines, nbr_columns = adjacency_matrix.shape
for i in xrange(height):
   for j in xrange(i+1):
       adjacency_matrix[i, j] = 0
adjacency_matrix = sparse.csr_matrix(adjacency_matrix)

这是进行这种转换的最佳方式吗?

【问题讨论】:

    标签: python-2.7 numpy matrix sparse-matrix


    【解决方案1】:

    方法#1

    您可以在使用np.triu_indices 获取所有这些上三角索引后一次性创建稀疏矩阵,就像这样 -

    r,c = np.triu_indices(height,1)
    out = sparse.csr_matrix((adjacency_matrix[r,c], (r,c)))
    

    方法#2

    或者,我们可以重置那些下三角元素(就像你正在做的那样,但是以带有掩码的矢量化方式),就像这样 -

    m = np.arange(height)
    adjacency_matrix[m[:,None] >= m] = 0
    

    然后,使用sparse.csr_matrix(adjacency_matrix) 创建稀疏矩阵。

    优点是我们避免了创建所有行、列上三角索引,这可能是大型数组的瓶颈。

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 2023-04-10
      • 2021-11-25
      • 2017-07-02
      • 1970-01-01
      • 2016-08-25
      • 2020-12-07
      • 2014-12-21
      • 1970-01-01
      相关资源
      最近更新 更多