Выбор равномерно распределенных значений из данных без равномерного распределения
Итак, у меня есть данные, которые распределены неравномерно. Маленькие значения чаще встречаются в данных, чем высокие. Но при выборе образца я хочу, чтобы образец был равномерно распределен. Функция вероятности происходит от подобранной функции. Вот пример моей проблемы
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
модуль.