Python3中的argsort

时间:2017-06-05 22:18:51

标签: python-2.7 python-3.x

我想知道为什么我在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]

在Python2中,freqrank包含以下结果: array([4215, 2825, 7066, ..., 539, 3188, 5239])。但是,在Python3中,freqrank仅包含array([0]),此结果会导致最后一行代码中的错误IndexError: too many indices for array。我怎样才能得到freqrank包含Python3中的排序列表的结果,就像我在Python2中一样?或者,如何在Python3中使上面的代码工作?感谢。

1 个答案:

答案 0 :(得分:1)

values()(和keys())返回由Python 3上的dict支持的视图对象,而不是列表。 numpy.array无法将dict视图转换为数组。

你可以在视图上调用list来获取列表,但是我建议完全取消dict,而不是这样做。您似乎没有做任何但是在其上调用keys()values()