我有一个阵列data
它有形状(N,6)
。我被最终列排序此阵列,使得:numpy 1.6.1 argsort()奇怪的行为?
sortx = numpy.argsort(data[:,-1])[::-1]
sortedData = data[ sortx, : ]
其中[::-1]
用于从高向低的列进行排序,而不是低到高,并且数据是float64。我那么这个排序数组保存到一个文件.npy
如下:
numpy.save('file.npy', sortedData)
然而,当我再次加载阵列回来和检查数据的排序,它不会出现在订购!这只是一些行,并不是所有这些都很奇怪。
data_again = numpy.load('file.npy')
order = numpy.argsort(data_again[:,-1])[::-1]
r = numpy.arange(len(data_again))
如果你比较r
和order
与numpy.sum(order == r)
,你看,这不等于N.在2%左右没有以相同的顺序!
首先,我是否正确理解上述代码?其次,任何人都可以重现这一点吗?我在Linux上使用Python 2.7.2,numpy 1.6.1。
更新:甚至在第一次排序和保存之前甚至会发生此行为。所以这与排序本身有关。排序列中有重复的值。
有很多你可以做的孤立问题;它是否发生没有中间保存以及,例如? – 2014-09-05 12:53:41
什么是数据类型?他们也许看起来像数字的字符串?如果你发布一些能够再现问题的数据,它将对我们有很大的帮助。 – unutbu 2014-09-05 12:54:14
嘿。谢谢。它确实发生没有保存。 dtype是float64。 – 2014-09-05 12:59:38