Numpy массив с различным стандартным отклонением и средним значением для строки - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть pandas фрейм данных с двумя столбцами. Они представляют собой среднее значение и стандартное отклонение.

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

import numpy as np
import pandas as pd

rng = np.random.RandomState(0)

#n_points = 4_000_000
n_points = 10
d_dimensions = 2

X = rng.random_sample((n_points, d_dimensions))

df = pd.DataFrame(X)
display(df.head())

df['raondomized'] = df.apply(lambda x: np.random.normal(x[0], x[1], 1), axis = 1)
df.head()

Это очень медленно, когда количество записей увеличивается.

Numpy массив с различным стандартным отклонением на строка

np.random.seed(444)
arr = np.random.normal(loc=0., scale=[1., 2., 3.], size=(1000, 3)).T

print(arr.mean(axis=1))
# [-0.06678394 -0.12606733 -0.04992722]
print(arr.std(axis=1))
# [0.99080274 2.03563299 3.01426507]

показывает, как выполнить векторизованную выборку с равными средствами - как это можно изменить для поддержки различных средств, как моя наивная версия, использующая apply, но быстрее?

A:

np.random.normal(df[0], df[1], 1)

возвращает только одно скалярное значение, даже если указано несколько средних / стандартных отклонений.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Как насчет

np.random.normal(df[0], df[1], len(df))

Вы также можете указать, сколько прогонов по спецификации (скажем, 1000),

np.random.normal(df[0], df[1], (1000, len(df)))
1 голос
/ 06 февраля 2020
df['raondomized'] = np.random.normal(df[0], df[1])

Важно не указывать количество элементов.

...