Numpy: как заменить редкие числа в массиве на -1?
У меня есть огромный массив, в котором я дал уникальные индексы каждым растениям (1,2,3,...,n). Получается в массиве есть блок одинаковых чисел(индексов), и если число повторений этого индекса < 15, то этот индекс нужно заменить на -1.
Как я пробовал это сделать?
array2 = np.unique(array, return_counts=True) #Ищу кол-во индексов
i = 0
while i <= array2[1].size:
array[array == array2[0][i] & array2[1][i] < 15] = -1 #Делаю замену в цикле
i = i + 1
А вот если вот так, то работает, только очень долго
if (array2[1][i] < 15):
array[array == array2[0][i]] = -1
i = i + 1
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Первый шаг с подсчетом числа вхождений через unique вы сделали совершенно верно.
Ваш цикл можно заменить на numpy.extract и numpy.isin
Так как у меня нет ваших данных, то вот пример со случайным вектором:
# 1000 целых от 0 до 100
A = np.random.randint(100, size=1000)
# подсчет числа вхождений
B = np.unique(A, return_counts=True)
# Извлечение элементов, удовлетворяющих условию
C = np.extract(B[1] < 15, B[0])
# Замена извлечённых элементов на -1
A[np.isin(A, C)] = -1
Функция numpy.isin(A,C) возвращает маску True для элементов массива A, которые принадлежат массиву C, и False для всех остальных.

