Эффективная реализация случайной выборкиPython

Программы на Python
Anonymous
Эффективная реализация случайной выборки

Сообщение Anonymous »

Если у вас есть 4 списка A, B, C и D, которые содержат объекты определенной длины, например, список A имеет элементы n_a и все элементы имеют ширину 1, список B содержит элементы n_b, и все элементы имеют ширину 2, список C имеет элементы n_c, и все элементы имеют ширину 3, а список D имеет n_d< /code>, и все элементы имеют ширину 4. Цель состоит в том, чтобы создать массив, элементы которого случайным образом выбираются из A, B, C и D в соответствии с определенным пользователем распределением вероятностей, например {1: 0,25, 2: 0,25, 3:0,5, 4:0,0}. Например, при распределении = {1: 0,25, 2: 0,25, 3: 0,5, 4: 0,0} выходная сетка должна давать случайные элементы примерно с 25% элементов шириной 1 из списка A, 25% элементов шириной 2 из списка. B и 50% элементов шириной 3 из списка C, при этом запрещая элементы шириной 4.
Вот как я случайным образом выбираю элементы из всех четырех списков:

Код: Выделить всё

import numpy as np
import random

A = [1, 2, 3]
B = ['aa', 'bb', 'cc']
C = [111, 222, 333]
D = ['aaaa', 'bbbbb', 'cccc']

num_of_rows = 4  # no. of rows in the final grid
num_of_coulmns = 5  # no. of columns in the final grid

# Define the probabilities
p_A = 0.25
p_B = 0.25
p_C = 0.5
p_D = 0.0

probabilities = [p_A, p_B, p_C, p_D]

# Create the random length array by sampling from the lists
result_array = []

for _ in range(num_of_rows):
# Choose a list based on the probabilities
chosen_list = random.choices([A, B, C, D], weights=probabilities, k=1)[0]

# Sample a random element from the chosen list
element = random.choice(chosen_list)

# Append the element to the result array
result_array.append(element)
Но этот метод будет слишком неэффективен для больших значений строк и столбцов сетки (например, 1000). Есть ли лучший способ добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/785 ... m-sampling

Вернуться в «Python»