我有我使用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