我正在使用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
这个错误与这样一个事实有关,即它是一个稀疏矩阵我会很感激任何帮助,我的意思是一种将日志应用于稀疏矩阵的方法。
答案 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()
这具有使专案稀疏的优点。