Равномерно распределенные данные в общих измерениях

#python #numpy #machine-learning #scipy

#python #numpy #машинное обучение #scipy

Вопрос:

Как я могу сгенерировать равномерно распределенные [-1,1] ^ d данные в Python? Например, d — это измерение, подобное 10.

Я знаю, как генерировать равномерно распределенные данные, такие как np.random.randn(N), но размерность меня сильно смущает.

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

1. randn вернет образцы нормального распределения, а не равномерного распределения. Я чувствую, что для многомерного равномерного распределения вы можете просто использовать произведение d одномерных равномерных распределений, но я не совсем уверен.

2. Этот вопрос неясен; принятый ответ, по-видимому, является равномерным распределением, но в вопросе задается гауссово / нормальное распределение docs.scipy.org/doc/numpy/reference/generated /…

Ответ №1:

Предполагая независимость отдельных координат, тогда следующее сгенерирует случайную точку в [-1, 1)^d

 np.random.random(d) * 2 - 1
  

Следующее будет генерировать n наблюдения, где каждая строка является наблюдением

 np.random.random((n, d)) * 2 - 1
  

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

1. Спасибо. получил именно то, что я ожидал. Мне нужны были 2d-выборки в диапазоне от -5 до 5. Итак, я использовал np.random.random((n,2)) * 10 — 5.

Ответ №2:

Как уже указывалось, randn выдает нормально распределенное число (оно же гауссово). Для равномерного распределения вы должны использовать «равномерный».

Если вам нужен только один образец за раз из 10 равномерно распределенных чисел, вы можете использовать:

 import numpy as np
x = np.random.uniform(low=-1,high=1,size=10)
  

ИЛИ, если вы хотите сгенерировать множество (например, 100) из них одновременно, вы можете сделать:

 import numpy as np
X = np.random.uniform(low=-1,high=1,size=(100,10))
  

Теперь X[0], X[1], … каждый имеет длину 10.

Ответ №3:

Вы можете импортировать random модуль и вызвать random.random , чтобы получить случайную выборку из [0, 1) . Вы можете удвоить это и вычесть 1, чтобы получить выборку из [-1, 1) .

Нарисуйте значения d таким образом, и кортеж будет равномерно извлекаться из куба [-1, 1) ^ d .

Ответ №4:

Без numpy:

 [random.choice([-1,1]) for _ in range(N)]
  

Могут быть причины для использования внутренних механизмов numpy или использования random() вручную и т. Д. Но это детали реализации, а также связанные с тем, как генерация случайных чисел распределяет биты энтропии, предоставляемые операционной системой.

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

1. Хм, я думаю, что кто-то проголосовал против, потому что в OP четко не указано, что он искал равномерное распределение вида [-1,1] x[-1,1]x … x[-1,1], а не равномерное распределение среди значений [-1, -1] ^ d (то есть {-1,1} ^d). Поскольку я чувствую, что вопрос OP был чрезвычайно расплывчатым (OP считает, что функция, которую они хотят, является однородной, когда она на самом деле гауссова), и что синтаксис был неясен, и что моя интерпретация разумна, я просто оставлю это здесь на случай, если кто-то еще сочтет это полезным.