Как сгенерировать нормально распределенную переменную в Python?

У меня есть список из 10 значений:

variable=[2.1, 5.3, 4.1, 6.7, 2, 6.6, 1.9, 4.51, 4, 7.15]

Его длина:

>>> len(variable)
10

Его среднее значение:

>>> mean(variable)
4.436

Его стандартное отклонение:

>>> np.std(variable)
1.8987269419271429

Из него я хочу сгенерировать new_variable, имеющий len(new_variable)==100 и нормально распределенный, где mean==4.436 и np.std==1.898.

Проверьте numpy.random.randn или scipy.stats, если вы хотите точного управления.

jlandercy 19.11.2022 09:30
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
1
1
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать функцию random.gauss:

1 образец:

import random
x = random.gauss(4.436, 1.898)

или 100 образцов:

import random
x = [random.gauss(4.436, 1.898) for _ in range(100)]

Это стандартная библиотека, ничего устанавливать не нужно. Вас также может заинтересовать библиотека статистики.

Спасибо, random.gauss лучший метод, когда диапазон становится слишком большим?

Khaled DELLAL 19.11.2022 10:23

Так и должно быть, пока вы остаетесь в пределах чисел с плавающей запятой

mousetail 19.11.2022 10:42
Ответ принят как подходящий

Эта функция достигает именно того, что вы просили, путем преобразования случайно сгенерированного распределения.

from statistics import NormalDist, mean, stdev

def get_target_dist(target_mean, target_std, size):
    dist = NormalDist(target_mean, target_std).samples(size)
    dist_mean, dist_std = mean(dist), stdev(dist)
    dist_standard = [(val - dist_mean) / dist_std for val in dist]
    dist_scaled = [val * target_std + target_mean for val in dist_standard]
    return dist_scaled

dist = get_target_dist(4.436, 1.898, 100)

print("len:", len(dist))
print("mean:", mean(dist))
print("std:", stdev(dist))

# len: 100
# mean: 4.436
# std: 1.898

Спасибо и добро пожаловать в ТАК, работает ли get_target_dist, когда size больше?

Khaled DELLAL 19.11.2022 10:21

Привет, @KhaledDELLAL, спасибо! Конечно, просто выполните, например. "dist = get_dist(4.436, 1.898, 1000)" и проверьте результат;)

khalo-sa 19.11.2022 11:17

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