2017-06-05 8 views
-1

私はPython2とPython3でargsortを使うことで、なぜ別の結果が得られるのか不思議です。 Python2ではPython3のargsort

## 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] 

を、freqrankのように結果が含まれています: array([4215, 2825, 7066, ..., 539, 3188, 5239])次のように私のコードがあります。しかし、Python3ではfreqrankにはarray([0])しか含まれておらず、この結果は最後のコード行にIndexError: too many indices for arrayというエラーを引き起こします。 freqrankにPython3でソートされたリストがあるのと同じ結果を得るにはどうすればいいですか?あるいは、上記のコードをPython3で動作させるにはどうすればよいですか?ありがとう。

答えて

1

values()(およびkeys())は、リストではなくPython 3のdictがサポートするビューオブジェクトを返します。 numpy.arrayは、dictビューを配列に変換できません。

ビュー上でlistと呼ぶとリストを取得できますが、これを行うのではなく、完全に削除することをおすすめします。 は何もしていないようですが、keys()となり、values()となります。

+0

これは大いに役立ちます。ご協力いただきありがとうございます! – tzu