我有一個陣列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