【问题标题】:Accessing column in sparse CSR matrix访问稀疏 CSR 矩阵中的列
【发布时间】:2021-08-03 17:17:23
【问题描述】:

在访问稀疏 CSR 矩阵中的最后一列时遇到一些问题。理想情况下,我想将最后一列转换为某种可以用作我的标签集的数组。我的 CSR 矩阵如下所示:

(0, 1976)   1
  (0, 2916) 1
  (0, 3871) 1
  (0, 4437) 1
  (0, 8202) 1
  (0, 9458) 1
  (0, 10597)    1
  (1, 4801) 1
  (1, 6903) 1
  (1, 7525) 1
  (2, 873)  1
  (2, 1017) 1
  (2, 1740) 1
  (2, 1925) 1
  (3, 1976) 1
  (3, 5606) 1
  (3, 6898) 1

我想访问包含所有“1”的最后一列。有没有办法可以做到这一点?

【问题讨论】:

  • 试试my_matrix.data
  • 通常,如果有人要求稀疏矩阵的最后一列A,我会说使用常规索引:A[:, -1]。这不是你想要的吗?您能否举一个小而完整的示例,例如,一个 4x8 矩阵(而不是具有数千列的矩阵),它可以准确显示您想要的内容?
  • 您展示的是非零索引和值的coo 样式显示。这些值或data 都是 1,但我不会将其描述为矩阵的“最后一列”。但即使A[:,-1] 作为“标签集”也没有意义。它只是一个 0 数组,只有几个(可能只有一个)。您需要更好地了解您的矩阵代表什么。

标签: python scipy sparse-matrix


【解决方案1】:

CSR 矩阵具有indiciesindptr 属性,请参见下面的示例,该示例使用这些属性将矩阵转换为列表:

def sparse_to_string_list(matrix: csr_matrix):
    res = []
    indptr = matrix.indptr
    indices = matrix.indices
    for row in range(matrix.shape[0]):
        arr = [k for k in indices[indptr[row]: indptr[row + 1]]]
        arr.sort()
        res.append(' '.join([str(k) for k in arr]))
    return res

【讨论】:

  • 谢谢扎文。但是,这似乎并不能完全产生我正在寻找的结果。我只想要最后一列,它是所有 1 的列。
  • 现在我得到的是矩阵[0] = [1976, 2916, 3871, ..., 10597]。但是,我正在寻找 [1, 1, 1, ... 1] 。我该怎么做?
  • 另外,有没有办法将字符串列表转换为整数列表?
猜你喜欢
  • 2021-08-21
  • 2023-03-25
  • 2015-12-05
  • 2019-08-09
  • 2012-05-08
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多