对非整数2D numpy数组进行排序

时间:2018-06-13 09:13:40

标签: python sorting numpy

如何使用非整数x和y坐标对二维数组进行排序?所以,例如这样的数组:

[
[0.005, 0.02]
[-0.1, 1.001]
[0.99, 0.004]
[1.1, 0.995]
]

请记住,对应于[0,0]的x,y坐标的[0.005,0.02]不一定具有最低x坐标或最低y坐标。我已经看到了如何为整数做到这一点,但我不确定这种情况。

2 个答案:

答案 0 :(得分:0)

正如斯文所指出的那样,你需要进行比较。如果按距离排序,则需要至少计算平方。你可以用这个:

x = np.array([[1,2],[0.1,0.2],[-1,0.5], [2,2], [0,0]])
x[np.multiply(x,x).sum(axis=1).argsort()]

如果要按x或y排序,可以在切片上使用argsort:

x[x[:,0].argsort()] # sort by x
x[x[:,1].argsort()] # sort by y

答案 1 :(得分:0)

你有一个(N,2)浮点数组。我制作了一个类似于你的虚拟阵列:

>>import numpy as np
>>A = np.random.random((5,2))*3 - 1 
>>A

array([[-0.09759485,  1.09646624],
       [ 1.24045241,  0.59099876],
       [-0.43080349, -0.33879412],
       [ 0.82403019,  0.16274243],
       [ 1.95623418, -0.64082276]])

根据您的说法,这些值是近似值。在订购它们之前,我们可以将它们四舍五入到最接近的整数。

>>A = np.round(A)
>>A
array([[-0.,  1.],
       [ 1.,  1.],
       [-0., -0.],
       [ 1.,  0.],
       [ 2., -1.]])

现在numpy.sort()应该为您提供所需的数组:

>>np.sort(A, axis=0)
>>A
array([[-0., -1.],
       [-0., -0.],
       [ 1.,  0.],
       [ 1.,  1.],
       [ 2.,  1.]])