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

从值列表转换为 scipy 稀疏矩阵的最有效方法是什么?

如何解决从值列表转换为 scipy 稀疏矩阵的最有效方法是什么?

我有一个值列表,我使用循环将这些值转换为 scipy.sparse.dok_matrix。我知道 numpy.bincount 但它不适用于稀疏矩阵。我想知道是否有更有效的方法来执行此转换,因为 dok_matrix 的构建时间非常长。

下面是一行的示例,但我通过循环缩放到 2D 矩阵。值 x 在输入列表中出现的次数是结果矩阵的第 x 个元素的值。

values = [1,3,4]
expected_result = [0,1,2,1]

matrix = dok_matrix((1,MAXIMUM_EXPECTED_VALUE))
for value in values:
    matrix[0,value] = matrix.get((0,card)) + 1

MAXIMUM_EXPECTED_VALUE数量级为 100000000 和 len(values) < 100,这就是我使用稀疏矩阵的原因。可能偏离主题:在 MAXIMUM_EXPECTED_VALUE 范围内使用的实际值也只有略多于 10000 个,但我认为散列到连续范围并转换回来可能更复杂。

解决方法

看起来标准的 coo 样式输入适合您的情况:

In [143]: from scipy import sparse
In [144]: values = [1,3,4]
In [145]: col = np.array(values)
In [146]: row = np.zeros_like(col)
In [147]: data = np.ones_like(col)
In [148]: M = sparse.coo_matrix((data,(row,col)),shape=(1,10))
In [149]: M
Out[149]: 
<1x10 sparse matrix of type '<class 'numpy.int64'>'
    with 4 stored elements in COOrdinate format>
In [150]: M.A
Out[150]: array([[0,1,2,0]])

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