我试图创建一个数组(10000,50)大小(我提到这个大小是因为效率很重要),然后:
按升序排列前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)

谢谢

最佳答案

使用.sort方法对数组进行就地排序可能会更快,而不是返回副本的np.sort方法可以使用负步长索引第二个维度,以按降序对最后5000行的列进行排序:

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

08-05 04:09