【发布时间】:2014-10-22 03:41:59
【问题描述】:
我有两个形状完全相同但数据值和 nnz 值可能不同的 scipy 稀疏 csr 矩阵。我现在想要获取一个矩阵的前 10 个元素并增加另一个矩阵上相同索引的值。我目前的做法如下:
idx = a.data.argpartition(-10)[-10:]
i, j = matrix.nonzero()
i_idx = i[idx]
j_idx = j[idx]
b[i_idx, j_idx] += 1
我必须这样做的原因是 a.data 和 b.data 不一定具有相同数量的元素,因此索引会有所不同。
我现在的问题是我是否可以通过某种方式改进这一点。据我所知,非零过程并不优雅,因为我必须分配两个新数组,而且我对内存已经非常严格了。我可以通过 csr_matrix.indices 获得 j_indices 但 i_indices 呢?我可以以一种很好的方式使用 indptr 吗?
欢迎任何提示。
【问题讨论】:
-
indptr每行有一个值(加 1)。它指示每一行在data和indices数组中的起始位置。您可以进行数学运算,也可以转换数组tocoo()。然后row和col有你想要的值。但请注意,有一些关于索引可能未排序的警告。 -
查看
nonzero的代码。 If 将矩阵转换为coo并返回row和col。 -
top 10 elements是否表示 CSR 格式中的前 10 个非零值?
标签: python numpy scipy sparse-matrix