我想知道为什么我在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中使上面的代码工作?感谢。
答案 0 :(得分:1)
values()
(和keys()
)返回由Python 3上的dict支持的视图对象,而不是列表。 numpy.array
无法将dict视图转换为数组。
你可以在视图上调用list
来获取列表,但是我建议完全取消dict,而不是这样做。您似乎没有做任何但是在其上调用keys()
和values()
。