首页 文章

将自定义函数应用于sklearn中的稀疏矩阵

提问于
浏览
1

我正在研究一个情绪分析项目 . 我在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 .

1 回答

  • 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函数和方法限制了稀疏矩阵的“知识” . 熟悉稀疏的方法和功能 . 如果这些还不够,那么我们可以探索替代方案 .

相关问题