Python中Numpy数组[][]与[,]索引的差异及排序结果不同的原因
为什么numpy双括号[][]和单括号[,]索引排序结果不同
先明确关键前提
sampleArray[1,:].argsort()的结果是[2,1,0]——第二行[82,22,12]从小到大排序后,对应原元素的索引顺序是2(对应12)、1(对应22)、0(对应82)。
两种索引的本质差异
双括号
[][]是两次独立索引:sampleArray[:][sampleArray[1,:].argsort()]等价于先执行sampleArray[:](返回原数组的完整视图,和原数组完全一致),再对这个结果做行索引[[2,1,0]],也就是取原数组的第2行、第1行、第0行。最终得到的是行的重新排列,和“按第二行排序列”的需求完全不沾边。单括号
[,]是一次多维索引:sampleArray[:,sampleArray[1,:].argsort()]是numpy的多维索引语法,逗号前的:表示保留所有行,逗号后的[2,1,0]表示按这个顺序重新排列列。也就是把原数组的列,按照第二行元素从小到大的顺序重新排布,这才是你想要的“按第二行对数组列排序”的效果。
实际输出验证
- n1的输出(行倒序):
[[53 94 66] [82 22 12] [34 43 73]] - n2的输出(按第二行排序列):
[[73 43 34] [12 22 82] [66 94 53]]
内容的提问来源于stack exchange,提问作者Rahul v
相关产品推荐
相关产品推荐

