Генерирование N случайных наборов данных из выборки из n значений в соответствии с нормальным распределением? (Python)

#python #random

Вопрос:

Я хочу сгенерировать N случайных наборов данных из списка случайных чисел. Я могу легко генерировать n случайных значений, используя это:

 normal(loc=mu, scale=sigma, size=n)
 

где loc-среднее значение, масштаб-стандартное отклонение, размер-количество значений.

Но теперь я хочу повторить этот генератор случайных чисел N раз, чтобы создать N наборов данных, отличающихся друг от друга. Кто-нибудь может помочь? Я чувствую, что это нетрудно сделать, но я очень новичок в программировании.

Комментарии:

1. Чем они отличаются друг от друга? Вы хотите взять N выборок нормального распределения с этими параметрами?

2. Я имею в виду N различных наборов данных, учитывая диапазон моего распределения. Например, предположим, что у меня среднее значение 2 при Std 1, и я генерирую 5 случайных чисел для этого набора: (1.7, 1.3, 0.4, 1.8, 0.7). Теперь предположим, что я хочу сгенерировать еще 1000 из них, которые все еще находятся в дистрибутиве. Как бы я это сделал? Ценю любую помощь!

Ответ №1:

Если вам нужны n выборки k значений, сгенерированных из нормального распределения, то

 np.random.normal(loc=mu, scale=sigma, size=(n, k))
 

Пример:

 >>> mu, sigma, n, k = 0, 0.1, 10, 5
>>> np.random.normal(loc=mu, scale=sigma, size=(n, k))
array([[-0.07518366, -0.1949778 , -0.00940813,  0.00993604, -0.07682189],
       [-0.03299335,  0.01224153,  0.15198659,  0.18654867,  0.18538708],
       [-0.10499824,  0.11863809, -0.08196595, -0.07259012, -0.13982268],
       [ 0.08297579, -0.08121311,  0.19496005,  0.00710787,  0.04434566],
       [ 0.00057888, -0.18052104, -0.02845761,  0.03330374, -0.08525697],
       [-0.11370541,  0.01166695, -0.09914575,  0.14135651, -0.03463862],
       [-0.13043708,  0.16128385,  0.03448309,  0.20302464,  0.02949679],
       [-0.08506748, -0.08459261,  0.05036709, -0.05956242, -0.10132293],
       [ 0.07130109, -0.01409814, -0.06980729,  0.05180577,  0.19270917],
       [ 0.04884829, -0.02219597,  0.04511094, -0.10689077, -0.00715145]])
 

Комментарии:

1. @AmmarBayyari, не за что. Если этот ответ решает вашу проблему, установите флажок, чтобы этот вопрос был удален из очереди без ответа.

Ответ №2:

попробуйте это:

 import numpy as np
repeat = 100
mu, sigma = 0, 0.1 # mean and standard deviation
[np.random.normal(mu, sigma, 10) for r in range(repeat)]
 

Вы можете прочитать документ о random :

нормальный(loc=0,0, масштаб=1,0, размер=Нет)

Параметры

размер : int или кортеж int, необязательная форма вывода. Если заданная форма, например, (m, n, k) , то m * n * k рисуются образцы. Если значение size равно None (по умолчанию), возвращается одно значение, если loc scale оба скаляра являются скалярами. В противном случае np.broadcast(loc, scale).size будут взяты образцы.

вы можете использовать size , как показано ниже:

 repeat ,length =2 , 4
mu, sigma = 0, 0.1
np.random.normal(mu, sigma, size=(repeat,length))
 

Выход:

 array([[ 0.09247016,  0.04766574, -0.16065042,  0.15859744],
       [ 0.08376381,  0.01822829, -0.0690609 , -0.10800701]])
 

Комментарии:

1. @AmmarBayyari добро пожаловать, чувак. если это правильно. пожалуйста, прочитайте эту ссылку : meta.stackexchange.com/questions/5234/…