我有一个通过使用 Sklearn 的 TfidfVectorizer 对象获得的稀疏矩阵:
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', vocabulary=my_vocab, stop_words='english')
tfidf = vect.fit_transform([my_docs])
稀疏矩阵是(为了一般性,去掉数字):
<sparse matrix of type '<type 'numpy.float64'>'
with stored elements in Compressed Sparse Row format>]
我试图为每一行获取一个数值,以告诉我文档中我要查找的术语有多高。我真的不在乎它包含哪些单词,我只想知道它包含了多少。所以我想得到每个或 row*row.T 的规范。但是,我很难与 numpy 合作来获得这个。
我的第一种方法是简单地做:
tfidf[i] * numpy.transpose(tfidf[i])
但是,numpy 显然不会转置小于一维的数组,因此只会对向量进行平方。所以我试着做:
tfidf[i] * numpy.transpose(numpy.atleast_2d(tfidf[0]))
但是 numpy.transpose(numpy.atleast_2d(tfidf[0])) 仍然不会转置该行。
我继续尝试获得该行的规范(无论如何,这种方法可能更好)。我最初的方法是使用 numpy.linalg。
numpy.linalg.norm(tfidf[0])
但这给了我一个“尺寸不匹配”的错误。所以我尝试手动计算标准。我首先设置一个等于稀疏矩阵的 numpy 数组版本的变量并打印出第一行的 len:
my_array = numpy.array(tfidf)
print my_array
print len(my_array[0])
它正确打印出 my_array ,但是当我尝试访问 len 它告诉我:
IndexError: 0-d arrays can't be indexed
我只是想获得 fit_transform 返回的稀疏矩阵中每一行的数值。获得规范将是最好的。非常感谢这里的任何帮助。