我正致力于情感分析项目。我在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。
答案 0 :(得分:1)
稀疏csr矩阵有一个mean
方法,稀疏版本为np.mean
:
In [2188]: a = np.array([1, 0, 1, 0, 0, 0, 0, 1, 0, 1])
In [2189]: a1 = sparse.csr_matrix(a)
In [2190]: a1
Out[2190]:
<1x10 sparse matrix of type '<class 'numpy.int32'>'
with 4 stored elements in Compressed Sparse Row format>
密集规范化:
In [2191]: np.mean(a)
Out[2191]: 0.40000000000000002
In [2192]: a/np.mean(a)
Out[2192]: array([ 2.5, 0. , 2.5, 0. , 0. , 0. , 0. , 2.5, 0. , 2.5])
稀疏规范化:
In [2193]: a1.mean()
Out[2193]: 0.40000000000000002
In [2194]: a1/a1.mean()
Out[2194]:
<1x10 sparse matrix of type '<class 'numpy.float64'>'
with 4 stored elements in Compressed Sparse Row format>
In [2195]: (a1/a1.mean()).A
Out[2195]: array([[ 2.5, 0. , 2.5, 0. , 0. , 0. , 0. , 2.5, 0. , 2.5]])
正如我刚才在关于稀疏点积的问题中所解释的那样,numpy函数和方法限制了稀疏矩阵的“知识”。熟悉稀疏的方法和功能。如果这些还不够,那么我们可以探索替代方案。