Нормальное распределение с использованием Numpy

#python #numpy #normal-distribution

#python #numpy #нормальное распределение

Вопрос:

Я хочу сгенерировать набор данных со m случайными точками данных k измерений в каждой. Что приводит к размеру данных формы (m, k) . Эти точки должны быть i.i.d. из нормального распределения со средним значением 0 и стандартным отклонением 1. Существует 2 способа генерации этих точек.

Первый способ:

 import numpy as np

# Initialize the array 
Z = np.zeros((m, k)) 

# Generate each point of each dimension independent of each other 
for datapoint in range(m):
    z = [np.random.standard_normal() for _ in range(k)] 
    Z[datapoint] = z[:]
  

Второй способ:

 import numpy as np

# Directly sample the points
Z = np.random.normal(0, 1, (m, k))
  

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

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

1. Что заставляет вас думать, что второе не является i.i.d.?

Ответ №1:

Я предполагаю, что standard_normal это только normal со «стандартными» параметрами (среднее значение = 0 и std = 1).

Давайте проверим это:

 import numpy as np

rng0 = np.random.default_rng(43210)
rng1 = np.random.default_rng(43210)

print(rng0.standard_normal(10))
print(rng1.normal(0, 1, 10))
  

что дает:

 [ 0.62824213 -1.18535536 -1.18141382 -0.74127753 -0.41945915 1.02656223 -0.64935657  1.70859865  0.47731614 -1.12700957]
[ 0.62824213 -1.18535536 -1.18141382 -0.74127753 -0.41945915 1.02656223 -0.64935657  1.70859865  0.47731614 -1.12700957]
  

Поэтому я думаю, что это предположение было правильным.