Удалить массив значений из массива NumPy - PullRequest
0 голосов
/ 17 октября 2019

Этот пост является расширением этого вопроса .

Я хотел бы удалить несколько элементов из массива с определенными значениями. Это для

import numpy as np
a = np.array([1, 1, 2, 5, 6, 8, 8, 8, 9])

Как мне удалить один экземпляр каждого значения [1,5,8], чтобы на выходе было [1,2,6,8,8,9]. Все, что я нашел в документации по удалению массива, это использование np.setdiff1d, но при этом удаляются все экземпляры каждого числа. Как это можно обновить?

Ответы [ 2 ]

1 голос
/ 17 октября 2019
delNums = [np.where(a == x)[0][0] for x in [1,5,8]]
a = np.delete(a, delNums)

здесь, delNums содержит индексы значений 1,5,8, а np.delete () удалит значения по указанным индексам

OUTPUT:

[1 2 6 8 8 9]
1 голос
/ 17 октября 2019

Использование внешнего сравнения и argmax для удаления только один раз. Для больших массивов это будет занимать много памяти, так как созданная маска имеет a.shape * r.shape элементов.


r = np.array([1, 5, 8])
m = (a == r[:, None]).argmax(1)
np.delete(a, m)

array([1, 2, 6, 8, 8, 9])

Это делает предположим, что каждое значение в r присутствует в a хотя бы один раз, в противном случае значение в индексе 0 будет удалено, поскольку argmax не найдет совпадение и вернет 0.

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