如何将log应用于numpy稀疏矩阵元素

时间:2015-12-03 19:56:42

标签: python numpy

我正在使用python,sklearn和numpy,我正在创建以下稀疏矩阵:

    feats = tfidf_vect.fit_transform(np.asarray(tweets))
    print(feats)

    feats=np.log(np.asarray(feats))

但是我在应用日志时遇到以下错误:

   Traceback (most recent call last):
   File "src/ef_tfidf.py", line 100, in <module>
   feats=np.log(np.asarray(feats))
   AttributeError: log

这个错误与这样一个事实有关,即它是一个稀疏矩阵我会很感激任何帮助,我的意思是一种将日志应用于稀疏矩阵的方法。

3 个答案:

答案 0 :(得分:3)

将稀疏矩阵转换为ndarray的正确方法是使用toarray方法:

feats = np.log(feats.toarray())

np.array不了解稀疏矩阵输入。

如果您只想获取非零条目的日志并返回稀疏的结果矩阵,最好的方法可能是采用矩阵的data的对数并构建一个新的具有该数据的稀疏矩阵。

对于不同的稀疏矩阵类型,通过公共接口的工作方式是不同的;你想要查找你所拥有的任何类型的构造函数。或者,有私人_with_data方法:

feats = feats._with_data(np.log(feats.data), copy=True)

答案 1 :(得分:0)

fit_transform()返回scipy.sparse.coo_matrix对象,该对象具有data属性,该属性链接到稀疏矩阵的数据数组

您可以使用data属性直接操作coo稀疏矩阵的非零数据,如下所示:

feats.data = np.log(feats.data)

答案 2 :(得分:0)

因此,我实际上需要对一些稀疏矩阵p进行类似log(p+1)的操作,我发现这种scipy方法log1p可以在稀疏矩阵上精确返回该值。我没有足够的名声来发表评论,所以我只是把它放在这里,以防它对任何人有帮助。

您可以通过以下方式将其应用于原始问题

feats = (feats-1).log1p()

这具有使专案稀疏的优点。