Индексирование Numpy
Есть массив, из которого случайным образом выбираются индексы:
np.random.seed(42)
arr = np.arange(10)
random_indexes = np.random.choice(arr, size=arr.shape[0])
print(arr[random_indexes])
На выходе будет:
array([6, 3, 7, 4, 6, 9, 2, 6, 7, 4])
Необходимо вернуть значения массива, индексы которых не выбирались:
array([0, 1, 5, 8])
Есть ли иной способ вернуть их, кроме как:
arr[~np.in1d(arr, np.unique(arr[random_indexes]))]
Ответы (2 шт):
Автор решения: strawdog
→ Ссылка
Можно через list comprehension, а можно так:
rest = np.delete(arr, random_indexes)
array([0, 1, 5, 8])
Автор решения: MaxU
→ Ссылка
Можно использовать numpy.setdiff1d(), чтобы найти разницу множеств:
In [173]: np.setdiff1d(np.arange(len(arr)), random_indexes)
Out[173]: array([0, 1, 5, 8])
если arr всегда будет создаваться при помощи np.arange(N), тогда решение можно упростить:
In [174]: np.setdiff1d(arr, random_indexes)
Out[174]: array([0, 1, 5, 8])