【发布时间】:2021-01-02 21:45:16
【问题描述】:
对于稀疏矩阵,我们通常传入列索引 (indices) 和一个索引indices 向量的indptr 向量,因此indices[indptr[i]:indptr[i+1]] 是稀疏矩阵中i 行的元素。
是否有一个快速的、矢量化的、最好是 numpy 的解决方案来转换连续的向量
在 Python 中将行索引转换为 indptr?
例如,如果这是我的 rows 索引向量:[0,1,1,2,2,2,3,5]...
indptr 向量将是 [0,1,3,6,7,7,8],其中 7 重复,因为行向量缺少第 4 行。
我可以用一个简单的循环来做到这一点:
for i in range(len(rows)):
indptr[rows[i]+1] += 1
indptr=np.cumsum(indptr)
但我想知道是否有更快的矢量化方式来做到这一点?
【问题讨论】:
-
在您的代码中,
rows是什么,indptr的初始值是什么?不清楚[0,1,3,6,7,7,8]是如何从[0,1,1,2,2,2,3,5]构造的 -
@Ehsan rows 是数据的行索引,从上到下排序。因此,如果矩阵看起来像 [[1, 2], [3, 4]],则数据数组将为 [1, 2, 3, 4],行索引将为 [0, 0, 1, 1],并且列索引应该是 [0, 1, 0, 1]。转换为 indptrs 的行索引将为 [0, 2, 4]。
-
请查看发布的答案是否是您想要的。如果是,请随意接受。如果没有,请详细说明您如何构造数组
indptr
标签: python arrays numpy scipy sparse-matrix