Как лучше всего случайным образом выбрать число ненулевых элементов из массива со множеством повторяющихся целых чисел

#python #numpy

#питон #тупица

Вопрос:

Мне нужно случайным образом выбрать x ненулевых целых чисел из несортированного массива 1D numpy, содержащего y целых элементов, включая неизвестное количество нулей, а также повторяющиеся целые числа. Выходные данные должны включать повторяющиеся целые числа, если это требуется для этого случайного выбора. Каков наилучший способ достичь этого?

Ответ №1:

Один из вариантов состоит в том, чтобы сначала выбрать ненулевые элементы, а затем использовать random.choice() replace параметром, установленным в значение True или False) для выбора заданного количества элементов.

Что — то вроде этого:

 import numpy as np rng = np.random.default_rng() # doing this is recommended by numpy  n = 4 # number of non-zero samples  arr = np.array([1,2,0,0,4,2,3,0,0,4,2,1]) non_zero_arr = arr[arr!=0]  rng.choice(non_zero_arr, n, replace=True)  

Комментарии:

1. Это хорошо, но запускаю свой набор данных[1 2 0 0 1 2 1 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 выбор 6 чисел дал [1 2 1 1 1 2] , но в наборе всего 3 1. Я хочу выбирать случайным образом из присутствующих чисел, как если бы я выбирал монеты из сумки. Там может быть 3 монеты по 1 пенсу, и в этом случае 0, 1, 2 или 3 могут быть разыграны, но 4 не могут.

2. Хорошо, я думаю, что теперь у меня это есть — просто небольшая настройка. Я думаю, что я прав, говоря, что все, что мне нужно сделать, это изменить replace=True на replace=False. Спасибо.

3. Ах да, я не уточнил это четко. Рад, что ты это понял! Именно в этом и заключается назначение replace параметра.