Индексирование 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])
→ Ссылка