#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
.