Генерация n-мерных случайных чисел в Python - PullRequest
2 голосов
/ 04 июня 2010

Я пытаюсь сгенерировать случайные числа из гауссовского распределения. Python имеет очень полезный метод random.gauss(), но это только одномерная случайная величина. Как я могу программно генерировать случайные числа из этого распределения в n-измерениях?

Например, в двух измерениях возвращаемое значение этого метода по существу равно расстоянию от среднего значения, поэтому мне все равно потребуются координаты (x, y) для определения фактической точки данных. Полагаю, я мог бы сгенерировать еще два случайных числа, но я не уверен, как установить ограничения.

Я ценю любые идеи. Спасибо!

Ответы [ 4 ]

5 голосов
/ 04 июня 2010

Numpy имеет многомерные эквиваленты функциям в случайном модуле

Функция, которую вы ищете: numpy.random.normal

3 голосов
/ 27 ноября 2015

Вы можете сделать это, используя функцию np.random.multivariate_normal(). Он работает не только для двумерных данных, но и для любого количества измерений.

Например, если вы хотите, чтобы 100 двумерных точек были центрированы вокруг точки (1,3), вы можете сделать следующее.

mean = [1, 3]
cov = [[8, -5], [0.2, 0.2]]
x, y = np.random.multivariate_normal([0, 2], cov, 100).T

И для 100 трехмерных точек, центрированных вокруг этой точки (1,10 100), вы можете сделать это.

mean = [1, 10, 100]
cov = [[1,1,1], [1,1,1], [1,1,1]]
x, y, z = np.random.multivariate_normal(mean, cov, 100).T

Для получения дополнительной информации вот документация, но вы также можете спросить меня. http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multivariate_normal.html

1 голос
/ 04 июня 2010

Вам необходимо правильно разложить ваше многомерное распределение в состав одномерных распределений. Например, если вам нужна точка на гауссово-распределенном расстоянии от заданного центра и равномерно распределенный угол вокруг него, вы получите полярные координаты для дельты с гауссовским ро и равномерной тета (между 0 и 2 pi), тогда, если вам нужны декартовы координаты, вы, конечно, выполняете преобразование координат.

0 голосов
/ 04 июня 2010

Звучит так, будто вы запрашиваете многовариантное нормальное распределение . Чтобы сгенерировать значение из этого распределения, вам нужно иметь ковариационную матрицу, в которой прописаны отношения между x и y. Как связаны ваши x и y? Если x и y независимы, вы можете просто сгенерировать два значения с помощью random.gauss ().

Если вы не уверены, какова ваша ковариационная матрица, то у вас есть математическая задача, которую нужно решить, прежде чем вы сможете работать над проблемой программного обеспечения. Если вы предоставите больше информации о том, что вы пытаетесь смоделировать, мы могли бы помочь (и я вижу, что Алекс Мартелли только что опубликовал несколько решений для распространенных моделей).

...