我有我使用Sklearn的TfidfVectorizer对象获得一个稀疏矩阵的规范:获取numpy的稀疏矩阵行
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.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返回的稀疏矩阵中的每一行的数值。获得规范将是最好的。这里的任何帮助非常感谢。
它是什么类型的稀疏矩阵? – askewchan
嗨,谢谢你的回应。我编辑了我的答案以显示类型。 – Sterling
我可以解释最后一个错误:调用'np.array(tfidf)'将整个矩阵的1个元素和0个d数组作为一个对象。为了使它成为一个普通的数组,使用'tfidf.toarray()'或获得一个矩阵,使用'tfidf.todense()'。 – askewchan