Проверьте, является ли массив частью массива массивов, и удалите его. - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть следующий массив массивов:

import numpy as np
a = [np.array([52.941, 57.962]),
 np.array([52.918, 57.96 ]),
 np.array([52.908, 57.958]),
 np.array([52.898, 57.957]),
 np.array([52.878, 57.953]),
 np.array([52.868, 57.952]),
 np.array([52.813, 57.941])]

Теперь я хочу проверить, является ли массив test = np.array([52.908, 57.958]) частью упомянутых выше массивов, и удалить, если он является частью массива.

Как я могу это проверить и удалить?

Я пытался:

if test in a:
    print('okay')

и

a.remove(test)

... но это не работает.

Я получаю следующую ошибку:

ValueError: Истинное значение массива с более чем одним элементом неоднозначный. Используйте a.any () или a.all ()

Что это значит?

1 Ответ

0 голосов
/ 08 ноября 2018

Использование списка массивов препятствует использованию вами возможностей векторизации NumPy. Вы можете преобразовать в один массив, и это решит вашу проблему:

a = np.array(a)

if test in a:
    print('match found!')

Но в этот момент вы можете индексировать с помощью логического массива:

res = a[~(a == test).all(1)]

array([[ 52.941,  57.962],
       [ 52.918,  57.96 ],
       [ 52.898,  57.957],
       [ 52.878,  57.953],
       [ 52.868,  57.952],
       [ 52.813,  57.941]])

Если вас интересуют приближения с плавающей запятой, вы можете использовать np.allclose с np.apply_along_axis:

def test_close(b):
    return np.allclose(test, b)

res = a[~np.apply_along_axis(test_close, 1, a)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...