np.argsort返回结果是否正确?对其索引排序逻辑存疑
关于np.argsort结果的解释
首先明确np.argsort()的默认行为:它会按升序对数组指定维度(默认是最后一维,即每行)的元素排序,返回的是对应元素从小到大排列的原始索引。
我们逐行验证你的输入数组和输出结果:
第一行分析
输入行:[63, 28, 16, 5, 35]
元素从小到大排序:5(索引3)→16(索引2)→28(索引1)→35(索引4)→63(索引0)
所以argsort返回:[3, 2, 1, 4, 0],和实际输出完全一致。
第二行分析
输入行:[77, 32, 87, 95, 33]
元素从小到大排序:32(索引1)→33(索引4)→77(索引0)→87(索引2)→95(索引3)argsort返回:[1, 4, 0, 2, 3],也和实际输出一致。
第三行分析
输入行:[45, 40, 91, 14, 45]
元素从小到大排序:14(索引3)→40(索引1)→45(索引0)→45(索引4)→91(索引2)argsort返回:[3, 1, 0, 4, 2],同样符合实际输出。
你的预期结果错误的原因是搞反了排序逻辑——你可能误以为返回的是元素从大到小的索引,或者错误对应了元素和索引的关系。如果需要得到降序的索引排序,可以在argsort结果上反转,或者使用np.argsort(-random_array)。
示例(降序索引):
>>> np.argsort(-random_array) array([[0, 4, 1, 2, 3], [3, 2, 0, 4, 1], [2, 0, 4, 1, 3]], dtype=int64)
内容的提问来源于stack exchange,提问作者Kabir Sharma
相关产品推荐
相关产品推荐

