我需要同時對兩個數組進行排序,或者更確切地說,我需要對其中一個數組進行排序,並在排序時將其相關數組的相應元素與它相關聯。也就是說,如果數組是[(5,33),(4,44),(3,55)],我按第一個軸排序(標記在dtype ='alpha'下面),那麼我想:[(3.0,55.0 )(4.0,44.0)(5.0,33.0)]。這些都是大數據集,我需要先進行排序(對於nlog(n)速度),然後再執行其他操作。我不知道如何以適當的方式合併我的兩個單獨的數組,以使排序算法正常工作。我認爲我的問題很簡單。我嘗試三種不同的方法:如何構建適合numpy排序的數組?
import numpy
x=numpy.asarray([5,4,3])
y=numpy.asarray([33,44,55])
dtype=[('alpha',float), ('beta',float)]
values=numpy.array([(x),(y)])
values=numpy.rollaxis(values,1)
#values = numpy.array(values, dtype=dtype)
#a=numpy.array(values,dtype=dtype)
#q=numpy.sort(a,order='alpha')
print "Try 1:\n", values
values=numpy.empty((len(x),2))
for n in range (len(x)):
values[n][0]=y[n]
values[n][1]=x[n]
print "Try 2:\n", values
#values = numpy.array(values, dtype=dtype)
#a=numpy.array(values,dtype=dtype)
#q=numpy.sort(a,order='alpha')
###
values = [(x[0], y[0]), (x[1],y[1]) , (x[2],y[2])]
print "Try 3:\n", values
values = numpy.array(values, dtype=dtype)
a=numpy.array(values,dtype=dtype)
q=numpy.sort(a,order='alpha')
print "Result:\n",q
我註釋掉第一和第二改掉,因爲他們創造的錯誤,我知道第三人會工作,因爲這是鏡像我所看到的,當我RTFM。給定數組x和y(非常大,只顯示示例),我該如何構造能夠被numpy.sort正確調用的數組(稱爲值)?
*** Zip很好,謝謝。獎金問題:我以後如何將排序後的數據再次解壓到兩個數組中?
+1:壓縮效果很好搭配發電機使用,所以您不必創建巨大的內存列表,你可以使用發電機的功能來代替。 – 2009-02-18 12:01:04
我以後如何將排序的數據再次解壓到兩個數組中? – Alex 2009-02-18 18:57:52