Есть n
корзин с несколькими шариками в них, где количество шариков в корзинах соответствует степенному распределению p_1
с показателем gamma_1
, т.е. есть несколько корзин с большим количествомшары, в то время как большое количество бункеров имеют только несколько шаров. Кроме того, шары окрашены, где цвета шаров также соответствуют степенному распределению p_2
с другим показателем степени gamma_2
. Так что, в принципе, мне нужно реализовать совместное распределение вероятностей в Python.
Пока что, пользуясь некоторой помощью от (в Excel), случайно генерирующего распределение степенного закона Я реализовал следующую функцию, чтобы сначала назначить количество шаров (простых шаров) для бинов, следующих застепенное распределение. После вычисления количества шаров в каждой ячейке по степенному закону я затем использую аналогичную функцию, чтобы назначить цвета этим шарам, используя показатель степени gamma_2
.
def get_PL_sequence(how_many_bins, x_min, gamma):
numbers_as_per_PL = []
unique_numbers = [] #i.e. bins
bins = 0
while(bins < how_many_bins):
num = int(x_min*random.random()**(-1/gamma))
if(num not in unique_numbers):
unique_numbers.append(num)
numbers_as_per_PL.append(num)
bins = len(unique_numbers)
dict_num_freq = {}
for each in unique_numbers:
cnt = numbers_as_per_PL.count(each)
dict_num_freq[each] = cnt
list_sorted_tuples = sorted(dict_num_freq.items(), key=lambda item: item[1], reverse = True) #tuple = (number, number_of_times)
i = 1 #numbering will start from 1
renaming_dict = {} #for renaming bins. Key: old bin number, Value: new bin number
for tuple1 in list_sorted_tuples:
renaming_dict[tuple1[0]] = i
i += 1
for i in range(len(numbers_as_per_PL)):
numbers_as_per_PL[i] = renaming_dict[numbers_as_per_PL[i]]
new_unique_numbers = list(set(numbers_as_per_PL))
new_list_sorted_tuples = sorted(dict_num_freq.items(), key=lambda item: item[1], reverse = True) #tuple = (number, number_of_times)
new_dict_num_freq = {}
for each in new_unique_numbers:
cnt = numbers_as_per_PL.count(each)
new_dict_num_freq[each] = cnt
return new_dict_num_freq, numbers_as_per_PL
Однако, во-первых, я не уверен, является ли этот подход правильным или нет. Во-вторых, используя этот подход, я получаю все уникальные цветные шарики в верхней паре бинов, тогда как я ожидал, что большое количество уникальных цветных шариков будет распределено только в бункерах с очень небольшим количеством шариков.