2016-07-30 79 views
3

我试图创建一个数组(10000,50),大小(我提到的大小,因为效率是很重要的),然后输入:如何排序一半的二维数组大小排序(numpy的)

  • 按升序对前5000行进行排序
  • 按降序对接下来的5000行进行排序。

这里是我的代码:

samples = 10 # I'm going to increase it 10000 
sampleLength = 4 # I'm going to increase it 50 
halfSamples = int(samples/2) 

xx = numpy.multiply(10, numpy.random.random((samples, sampleLength))) 
xx[0:halfSamples,0:sampleLength]=numpy.sort(xx[0:halfSamples,0:sampleLength],axis=1) 
xx[halfSamples:samples,0:sampleLength]=numpy.sort(xx[halfSamples:samples,0:sampleLength],axis=1) 

这按升序排序的阵列的两个半,我无法找到的唯一的事情是在我的最后一行,使其在给什么参数降序。

我根据这个链接的尝试:Reverse sort a 2d numpy array in python

xx[halfSamples:samples,0:sampleLength]=numpy.sort(xx[halfSamples:samples,0:sampleLength:-1],axis=1) 

但得到了一个错误:

ValueError: could not broadcast input array from shape (5,0) into shape (5,4) 

感谢

+3

追加'[:,:: - 1]'在最后一行的末尾? – Divakar

回答

4

它可能会更快使用到位数组排序它的方法是.sort,而不是np.sort,它返回一个副本。您可以使用指数负步长到最后5000行的降序对列进行排序的第二个维度:

x = np.random.randn(10000, 50) 
x[:5000].sort(axis=1) 
x[-5000:, ::-1].sort(axis=1) 
+0

-5000是什么意思,为什么它和5000:10000一样? – OopsUser

+0

负索引相对于数组的末尾,所以'x [-5000:]'索引从数组末尾开始的第5000行。 'x [-1]'会给你最后一行,'x [-10:]'会给你最后10行等。 –

+0

很好的答案,谢谢 – OopsUser