Выбор равномерно распределенных значений из данных без равномерного распределения

Итак, у меня есть данные, которые распределены неравномерно. Маленькие значения чаще встречаются в данных, чем высокие. Но при выборе образца я хочу, чтобы образец был равномерно распределен. Функция вероятности происходит от подобранной функции. Вот пример моей проблемы

import numpy as np
import matplotlib.pyplot as plt

def func(x):
  return 50000*np.exp(-0.05*x)
a = np.concatenate([np.repeat(i, int(func(i))) for i in range(20,200)], axis=0)

b = np.divide(1, [int(func(x)) for x in a])
b = np.divide(b, np.sum(b)) 

plt.hist(np.random.choice(a, 10000, p=b, replace=False), bins=18)
plt.xlabel("Value")
plt.ylabel("Count")
plt.savefig('Sample.png')

К сожалению, я не могу опубликовать фотографию.

Кто-нибудь знает, что мне не хватает?

1 ответ

Мой ответ не совсем чистый способ сделать это, но это было бы просто:)

Вы можете просто создать равномерный распределительный массив длины n, а затем выполнить итерацию по нему, чтобы создать новый массив размером n, который будет элементом из неоднородного массива, ближайшим к однородному массиву.

Вы можете получить случайный равномерный массив с rand модуль.

Другие вопросы по тегам