#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
параметра.