2017-06-05 6 views
-1

Ich wundere mich, warum ich verschiedene Ergebnisse mit Argsort in Python2 und Python3 erhalten. Meine Codes sind wie folgt:argsort in 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] 

In Python2, freqrank enthält die Ergebnisse als: array([4215, 2825, 7066, ..., 539, 3188, 5239]). In Python3 enthält freqrank jedoch nur array([0]), und dieses Ergebnis verursacht weiterhin einen Fehler in der letzten Codezeile wie IndexError: too many indices for array. Wie kann ich die gleichen Ergebnisse erhalten, dass freqrank die sortierte Liste in Python3 enthält, wie ich in Python2 habe? Oder, wie kann ich die obigen Codes in Python3 arbeiten lassen? Vielen Dank.

Antwort

1

values() (und keys()) Rückgabeansichtsobjekte, die vom Diktat in Python 3 unterstützt werden, anstatt Listen. numpy.array kann eine Diktatansicht nicht in ein Array konvertieren.

Sie können list auf die Ansichten anrufen, um eine Liste zu erhalten, aber anstatt das zu tun, würde ich empfehlen, das Diktat vollständig zu beseitigen. Sie scheinen nichts zu tun , aber Aufrufund values() darauf.

+0

Das hilft sehr. Danke für Ihre Hilfe! – tzu