2017-06-05 40 views
-1

我想知道爲什麼我通過在Python2和Python3中使用argsort得到不同的結果。我的代碼如下:argsort在Python3

## Import Data 
allWrdMat10 = pd.read_csv("../../data/allWrdMat10.csv.gz", 
    encoding='CP932') 

## Set X as CSR Sparse Matrix 
X = np.array(allWrdMat10) 
X = sp.csr_matrix(X) 

dict_index = {t:i for i,t in enumerate(allWrdMat10.columns)} 

freqrank = np.array(dict_index.values()).argsort() 

X_transform = X[:, freqrank < 1000].transpose().toarray() 

freq1000terms = dict_index.keys() 
freq1000terms = np.array(freq1000terms)[freqrank < 1000] 

在Python2,freqrank包含結果爲: array([4215, 2825, 7066, ..., 539, 3188, 5239])。但是,在Python3中,freqrank僅包含array([0]),並且此結果進一步導致代碼的最後一行中的錯誤爲IndexError: too many indices for array。我如何獲得與Python2中的排序列表freqrank相同的結果?或者,我怎樣才能使上面的代碼在Python3中工作?謝謝。

回答

1

values()(和keys())返回由Python 3上的字典支持的查看對象,而不是列表。 numpy.array無法將字典視圖轉換爲數組。

你可以在視圖上調用list來獲得一個列表,但我並不這麼認爲,我建議完全刪除該詞典。你似乎沒有做任何事情,但在它上面調用keys()values()

+0

這有很大的幫助。謝謝你的幫助! – tzu