Numpy удалить строку из многомерного массива - PullRequest
1 голос
/ 05 октября 2019

У меня есть такой массив

k = np.array([[   1. , -120.8,   39.5],
       [   0. , -120.5,   39.5],
       [   1. , -120.4,   39.5],
       [   1. , -120.3,   39.5]])

Я пытаюсь удалить следующую строку, которая также находится в позиции индекса 1.

b=np.array([   0. , -120.5,   39.5])

Я пробовал традиционные методы, такие какследующее:

k==b #try to get all True values at index 1 but instead got this
array([[False, False, False],
       [ True, False, False],
       [False, False, False],
       [False, False, False]])

Другое, что я пробовал:

k[~(k[:,0]==0.) & (k[:,1]==-120.5) & (k[:,1]==39.5)]

Получил такой результат:

array([], shape=(0, 3), dtype=float64)

Я действительно удивлен, почемувышеуказанные методы не работают. Кстати, в первом методе я просто пытаюсь получить индекс, чтобы я мог использовать np.delete позже. Также для этой проблемы, я предполагаю, что не знаю индекса.

1 Ответ

2 голосов
/ 05 октября 2019

И k, и b являются числами с плавающей запятой, поэтому при сравнении на равенство возможны неточности с плавающей запятой. Вместо этого используйте np.isclose:

k[~np.isclose(k, b).all(axis=1)]
# array([[   1. , -120.8,   39.5],
#        [   1. , -120.4,   39.5],
#        [   1. , -120.3,   39.5]])

Где

np.isclose(k, b).all(axis=1)
# array([False,  True, False, False])

Сообщает, какой ряд k соответствует b.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...