【发布时间】:2017-03-11 23:46:38
【问题描述】:
我正在做一个情绪分析项目。我在 sklearn 上使用词袋。我想将行标准化为:
a = [1, 0, 1, 0, 0, 0, 0, 1, 0, 1]
#a -> 4 non zero values
归一化向量应该是:
[0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.25, 0.0, 0.25]
对于 b -> 8 个非零值:
b = [1, 0, 1, 1, 0, 1, 1, 1, 1, 1]
归一化向量应该是:
[0.125, 0.0, 0.125, 0.125, 0.0, 0.125, 0.125, 0.125, 0.125, 0.125]
class 'scipy.sparse.csr.csr_matrix
(0, 2111) 1
(0, 2812) 1
(0, 2848) 1
......
......
(0, 5745) 1
(0, 5823) 1
如何对这样的矩阵应用运算?
我知道我可以使用 '.toarray' 方法将其转换为常规矩阵,但这会引起内存问题,矩阵为数 Gb。
【问题讨论】:
-
这不是一个解决方案,而只是一个解决内存问题的建议。由于您正在处理稀疏矩阵,因此您可以将矩阵存储为 Matrix Market 格式。然后,您可以像处理向量一样以非常简单的方式对矩阵的每个值进行归一化。
-
你看过csr矩阵的方法吗?有一个总和,可能是一个平均值。使小数组稀疏并进行实验。
-
我应该添加
sklearn也有一些自定义稀疏函数 - 以加快该包中的常见任务。我查看了他们的代码以解决其他问题,但没有注意它们的记录位置或方式。
标签: python scipy scikit-learn linear-algebra sparse-matrix