python: УДАЛЯЙТЕ точки из очень большого 2D-массива, а элементы будут плавающими, например, удаляйте ненужные точки в KNN

#python #arrays

Вопрос:

У меня есть 2D массив, и я хочу удалить из него точку, но предположим, что она настолько велика, что я не могу указать индекс и просто захватить его, а значения массива являются плавающими. Как я могу удалить эту точку? С ПЕТЛЕЙ и БЕЗ ПЕТЛИ?? ниже приведен 2D массив, и я хочу удалить [ 32.9, 23.]

 [[ 1. ,  -1.4],
    [ -2.9,  -1.5],
    [ -3.6,  -2. ],
    [  1.5,   1. ],
    [  24. ,   11. ],
    [ -1. ,  1.4],
    [ 2.9,  1.5],
    [ 3.6,  2. ],
    [  -1.5,   -1. ],
    [  -24. ,   -11. ],
    [  32.9,   23. ],
    [-440. ,  310. ]]
 

Я пробовал это, но не работает:

 this_point = np.asarray([ 32.9,   23.])

[x for x in y if x == point]

del datapoints[this_point]

np.delete(datapoints,len(datapoints), axis=0)

for this_point in datapoints:
        del this_point
 

когда я это делаю, точка this_point остается после печати всех точек, что мне делать?

Комментарии:

1. del this_point удаляет this_point . Вы читали документы для numpy.org/doc/stable/reference/generated/numpy.delete.html ?

Ответ №1:

Python может удалить элемент списка по содержимому, но numpy делает это только по индексу. Итак, используйте «где», чтобы найти координаты соответствующей строки:

 import numpy as np
a = np.array([[ 1. ,  -1.4],
    [ -2.9,  -1.5],
    [ -3.6,  -2. ],
    [  1.5,   1. ],
    [  24. ,   11. ],
    [ -1. ,  1.4],
    [ 2.9,  1.5],
    [ 3.6,  2. ],
    [  -1.5,   -1. ],
    [  -24. ,   -11. ],
    [  32.9,   23. ],
    [-440. ,  310. ]])

find = np.array([32.9,23.])

row = np.where( (a == find).all(axis=1))
print( row )

print(np.delete( a, row, axis=0 ) )
 

Выход:

 (array([10], dtype=int64),)
[[   1.    -1.4]
 [  -2.9   -1.5]
 [  -3.6   -2. ]
 [   1.5    1. ]
 [  24.    11. ]
 [  -1.     1.4]
 [   2.9    1.5]
 [   3.6    2. ]
 [  -1.5   -1. ]
 [ -24.   -11. ]
 [-440.   310. ]]

C:tmp>
 

Комментарии:

1. спасибо,что делать, если я тоже хочу удалить соответствующее расстояние?

2. Я понятия не имею, что ты имеешь в виду. Вы здесь ничего не упомянули о расстояниях.

3. Я знаю, но если у меня есть их евклидово расстояние до этой точки в том же 2D-массиве, и после удаления этой точки я бы тоже хотел удалить соответствующее расстояние.. есть ли способ это сделать? я попробовал то же решение, что и выше, но оно не сработало, как я могу это сделать ?

4. row содержит номер строки, подлежащей удалению. Если два массива расположены параллельно, то вы можете использовать np.delete их точно так же, как я это сделал a .