Я хочу сгенерировать n
-строчный список, где каждая строка равна k
столбцам.
Тогда порядок основан на вероятности.
Дано: L = [1, 2, 3]
и список вероятностей P = [0.3, 0.2, 0.5]
,
Ожидаемый результат на основе вероятности:
[[3, 3],[3, 1],[1, 3],[3, 2],[2, 3],[1, 1]]
, где [3,3]
- первое, поскольку оно дает наибольшую вероятность 1.0
.
второй [3,1]
с 0.8
и т. д.
Вот мой код:
L = [3, 1, 2] # Input List
P = [0.3, 0.2, 0.5] # Probability List
k = 2 # 2 columns per row
n = 6 # 6 rows in 2D array
nL = np.array(L)
generated_list = np.zeros(shape=(1, k), dtype=int)
while generated_list.shape[0] != n:
choice = np.random.choice(L, size=k, p=P)
if not np.any(generated_list == [choice]):
generated_list = np.append(generated_list, [choice], axis=0)
У меня не может быть упорядоченного списка, основанного на вероятности.
Он также содержит дубликаты элементов.
Образец generated_list
Вывод:
[[0, 0],[3, 1],[2, 3],[1, 2],[2, 3],[2, 3]]
Какой лучший способ сделать это:
1. Сравните, если 1-D элемент уже находится в 2-D массиве
2. Пусть случайный выбор вернет первую комбинацию с наибольшей вероятностью