Сортировка нецелого двухмерного массива - PullRequest
0 голосов
/ 13 июня 2018

как бы вы отсортировали 2d массив с координатами x и y, которые не являются целыми числами и являются приблизительными?Так, например, такой массив как:

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

Имейте в виду, что [0,005, 0,02], соответствующее координате x, y [0,0], не обязательно имеет самую низкую координату x илисамая низкая координата у.Я видел, как это сделать для целых чисел, но я не уверен в этом случае.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

У вас есть (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.]])
0 голосов
/ 13 июня 2018

Как указал Свен, вам нужно сравнение.Если вы сортируете по расстоянию, то вам нужно вычислить хотя бы квадрат.Вы можете использовать это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...