微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将行向量转换为稀疏矩阵的inptrs的快速矢量化方法?

如何解决将行向量转换为稀疏矩阵的inptrs的快速矢量化方法?

对于稀疏矩阵,我们通常传入列索引(indices)和一个indptr向量,该向量为indices向量建立索引,以便indices[indptr[i]:indptr[i+1]]是第{行的元素{1}}在稀疏矩阵中。

有没有一种快速的矢量化(最好为numpy)解决方案来转换连续的矢量 在Python中将行索引插入i中?

例如,如果这是我的indptr索引向量:rows ...

[0,1,2,3,5]向量将是indptr,其中7重复,因为行向量缺少第4行。

我可以使用一个简单的循环来做到这一点:

[0,6,7,8]

但是我想知道是否有更快的矢量化方法

解决方法

我认为您正在寻找的是这个

np.bincount(rows).cumsum()
#[1 3 6 7 7 8]

如果矩阵底部的行可能为空,只需将其作为参数添加到bincount(根据@CJR的建议):

np.bincount(rows,minlength=num_rows).cumsum()
#[1 3 6 7 7 8]

您可能还想在前面插入0bincount所做的是计算每个bin /行中的元素数量,然后cumsum将它们相加。这样,您还将包括丢失的垃圾箱/行。

插入0的最佳方法可能是这样的:

np.bincount(np.array(rows)+1).cumsum()
#[0 1 3 6 7 7 8]

或者您可以直接通过以下方式实现:

np.insert(np.bincount(rows).cumsum(),0)
#[0 1 3 6 7 7 8]
,

另一个想法是

n = len(rows)
indptr = np.searchsorted(rows,np.arange(-1,n),side='right')

不确定哪个更快/更好

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。