np.random.choice
имеет ключевое слово аргумент replace
. Его значение по умолчанию True
. Если вы установите значение False
, я думаю, вы получите желаемый результат.
import numpy as np
vec = np.arange(0, 25000)
idx = np.random.choice(vec, 5000, replace=False)
idx_r = np.delete(vec, idx)
print([len(item) for item in (vec, idx, idx_r)])
Out:
[25000, 5000, 20000]
Однако numpy.random.choice
с replace=False
чрезвычайно неэффективен из-за плохого выбора реализации, с которым они застряли для обратной совместимости - он генерирует перестановку всего ввода только для того, чтобы взять небольшую выборку. Вместо этого вы должны использовать новый Генератор API , который не имеет этой проблемы:
rng = np.random.default_rng()
idx = rng.choice(vec, 5000, replace=False)