【发布时间】:2023-03-07 00:24:01
【问题描述】:
我有一个值列表,我正在使用循环将其转换为scipy.sparse.dok_matrix。我知道numpy.bincount,但它不适用于稀疏矩阵。我想知道是否有更有效的方法来执行此转换,因为 dok_matrix 的构建时间真的很长。
下面是一行的示例,但我通过循环缩放到二维矩阵。值x 在输入列表中出现的次数是结果矩阵的第x 元素的值。
values = [1, 3, 3, 4]
expected_result = [0, 1, 0, 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 多一点,但我认为散列到连续范围并转换回来可能更复杂。
【问题讨论】:
-
为什么不能只创建一个包含列索引的数组和一个包含值的数组并使用标准构造函数?另外 dok 类型的稀疏矩阵基本没用。
-
你指的是标准的numpy数组吗?是的,我必须为实际应用从 dok 转换为 csr。
标签: python scipy sparse-matrix