2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Глупый вопрос о генерации случайных векторов
Сообщение23.08.2018, 23:39 
Заслуженный участник


27/04/09
28128
Пусть в некотором евклидовом пространстве (вообще трёхмерном, но это не должно успокаивать) есть единичный вектор $\mathbf v$, и мы хотим сгенерировать вектор $\mathbf u$, распределённый в подпространстве $X = \langle\mathbf v\rangle^\perp$ (а) стандартно нормально или (б) равномерно по его единичной сфере.

Можно ли это сделать и не находя базиса $X$ (я был бы ещё может быть не против, если бы для неизменного $\mathbf v$ надо было нагенерировать кучу разных $\mathbf u$, но он каждый раз будет чуть-чуть другой), и генерируя ${}\leqslant m = \dim X$ нормально распределённых значений?

У меня решается задача (б), а задача (а) здесь добавлена для полноты; текущий способ такой: берётся $\pmb\xi\sim\mathcal N_m$, вычисляются $\mathbf u' = \pmb\xi - (\pmb\xi, \mathbf v)\mathbf v$ (выкинули лишнюю размерность), $\mathbf u = \mathbf u'/\lVert\mathbf u'\rVert$ (выкинули длину). Как видно, этот способ удовлетворяет первому, но не второму требованию, и хотя не жалко сгенерировать лишнюю величину, всё же интересно, нельзя ли что-то сделать.

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

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение24.08.2018, 00:24 
Заслуженный участник
Аватара пользователя


01/09/13
4321
arseniiv в сообщении #1334205 писал(а):
хотя не жалко сгенерировать лишнюю величину, всё же интересно, нельзя ли что-то сделать.

Какой ценой??

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение24.08.2018, 00:41 
Заслуженный участник
Аватара пользователя


16/07/14
8469
Цюрих
Если хочется, можно одно лишнее число "вернуть назад" - воспользоваться тем, что скалярное произведение с $\mathbf v$ распределено нормально и независимо с получившимся $\mathbf u$. В итоге для генерации $k$ векторов нам понадобится $km + 1$ случайная величина.
arseniiv в сообщении #1334205 писал(а):
$\mathbf u' = (\pmb\xi, \mathbf v)\mathbf v$

Тут точно не должно быть $\mathbf u' = \pmb \xi - (\pmb\xi, \mathbf v)\mathbf v$?

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение24.08.2018, 01:57 
Заслуженный участник


27/04/09
28128
Geen в сообщении #1334219 писал(а):
Какой ценой??
Ну, этот вопрос в общем теоретический, так что любой, какой вам не жалко.

mihaild в сообщении #1334225 писал(а):
Тут точно не должно быть $\mathbf u' = \pmb \xi - (\pmb\xi, \mathbf v)\mathbf v$?
О, спасибо. У меня там в коде было -=, так что вышла такая ошибка здесь. Исправляю.

mihaild в сообщении #1334225 писал(а):
Если хочется, можно одно лишнее число "вернуть назад" - воспользоваться тем, что скалярное произведение с $\mathbf v$ распределено нормально и независимо с получившимся $\mathbf u$.
О, красиво! (Хотя я бы не стал этим пользоваться в коде для Mathematica, оверхед манипуляций отдельными значениями может выйти больше, чем если нагенерировать изначально список побольше; с другой стороны, кому-то в низкоуровневом коде это точно было бы полезным.)

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 17:04 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #1334205 писал(а):
У меня решается задача (б), а задача (а) здесь добавлена для полноты; текущий способ такой: берётся $\pmb\xi\sim\mathcal N_m$

А зачем $\mathcal N$-то (для второго пункта)? Берём равномерно распределённый вектор из куба и тупо отбраковываем, если он не в шаре, далее по тексту. Коэффициент отбраковки примерно 0.5 для трёхмерного случая, вполне приемлемо. Дальше будет, конечно, хуже, но для не особо больших размерностей всё равно сойдёт.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 21:01 
Заслуженный участник


27/04/09
28128
ewert в сообщении #1334848 писал(а):
Берём равномерно распределённый вектор из куба и тупо отбраковываем, если он не в шаре, далее по тексту.
Ну, в моём случае это потребовало бы писать куда больше кода. Кроме того я в тот момент не помнил про метод с отбраковкой. Кроме того, в потенциальном практическом приложении можно нагенерировать заранее большую кучу нормально распределённых величин достаточно дёшево (зиккуратом каким-нибудь; хотя уже всё забыл про него).

Сам вопрос здесь, как я уже писал, больше теоретический: нам в некотором смысле приходится получать трёхмерный вектор, несмотря на то, что от них остаётся объект с двумя степенями свободы. Можно представить ситуацию, когда надо взять $N$ чисел и потом оставить что-то с $n\ll N$ степенями свободы. Практические решения, которые предложили (и ваше) меня полностью устраивают, но некоторая ферматическая неудовлетворённость остаётся.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 21:13 
Заслуженный участник
Аватара пользователя


16/07/14
8469
Цюрих
Пусть мы изначально сгенерировали двумерный вектор $\pmb \xi$ и сделали из него вектор $f(\pmb \xi, \mathbf v) \perp \mathbf v, \|f(\pmb \xi)\| = 1$. Тогда $f$ - "плохая" по второму аргументу, иначе $f(\pmb \xi, \mathbf v)$ при фиксированном $\pmb \xi$ было бы причесыванием ежа.
Что не означает, что такой $f$ невозможно, особенно с учетом того, что нас интересует только поведение почти наверное, а почти причесать ежа можно. Но означает, что нам придется выписывать какие-то не очень красивые штуки.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 21:20 
Заслуженный участник


11/05/08
32166
arseniiv в сообщении #1334897 писал(а):
нам в некотором смысле приходится получать трёхмерный вектор, несмотря на то, что от них остаётся объект с двумя степенями свободы

Это в известном смысле тоже отбраковка -- 30%-процентная (а при повышении размерности всё менее и менее существенная). Те или иные накладные расходы будут всегда. Вопрос лишь в суммарных затратах. Не представляю себе, как это генерация эн нормально распределённых случайных величин может оказаться дешевле генерации эн равномерных; ну разве что в символах кода выйдет на три-четыре байта короче.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 21:24 
Заслуженный участник
Аватара пользователя


16/07/14
8469
Цюрих
ewert в сообщении #1334905 писал(а):
Не представляю себе, как это генерация эн нормально распределённых случайных величин может оказаться дешевле генерации эн равномерных
Тут вопрос в том, как соотносится стоимость арифметики и генерации равномерных величин. Преобразовать равномерное на квадрате распределение в нормальное на плоскости можно за несколько корней / косинусов / логарифмов. Априори непонятно, дешевле это чем сгенерировать лишнюю величину, или дороже.

UPD: более точно (если пренебречь тем, что равномерное распределение на $[-1; 1]$ может на практике попасть в $0$ или не попасть в $[-1; 1]$ и не проверять на это) - достаточно сгенерировать две величины равномерно на $[-1; 1]$, посчитать $5$ произведений (из них одно - на константу), одно частное, один корень и один логарифм для получения двух нормально распределенных величин.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 21:24 
Заслуженный участник


04/05/09
4582
arseniiv в сообщении #1334897 писал(а):
Кроме того, в потенциальном практическом приложении можно нагенерировать заранее большую кучу нормально распределённых величин достаточно дёшево
Вроде бы эффективный метод генерации нормальных случайных чисел как раз с отбраковкой.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 22:14 
Заслуженный участник


27/04/09
28128
mihaild в сообщении #1334902 писал(а):
Тогда $f$ - "плохая" по второму аргументу, иначе $f(\pmb \xi, \mathbf v)$ при фиксированном $\pmb \xi$ было бы причесыванием ежа.
(О, то есть это у нас размерность пространства неудачная! :-)) Спасибо за результат, действительно просто.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 22:21 
Заслуженный участник
Аватара пользователя


16/07/14
8469
Цюрих
arseniiv в сообщении #1334922 писал(а):
О, то есть это у нас размерность пространства неудачная
Ну на самом деле тот же аргумент применим и к использованию трех случайных величин (и ваш метод действительно ломается при $\pmb \xi = \alpha \mathbf x$).
Зато не применим для четырехмерного пространства, но в нем я тоже не могу придумать, как обойтись генерацией трех величин.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение27.08.2018, 23:32 
Заслуженный участник


27/04/09
28128
Если я не ошибся в идее и реализации идеи, вектору с координатами $(a,b,c,d)$ в некотором ортонормированном базисе ортогональны, как и друг другу, и векторы $(b,-a,d,-c)$, $(c,-d,-a,b)$, $(-d,-c,b,a)$. Ну и потом умножаем их, если они все единичные, на три случайные координаты; тут читерство с использованием базиса выглядит для меня не так уж страшно. Аналогично для других чётных размерностей.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение28.08.2018, 01:01 


07/10/15

2400
Генерируется равномерно распределённый вектор.
$\xi \sim U(-\pi,\pi]^{n-1}$
потом:
$\rho_1=cos(\xi_1)$,
$\rho_2=cos(\xi_2)sin(\xi_1)$,
$\rho_3=cos(\xi_3)sin(\xi_2)sin(\xi_1)$,
и т.д., т.е. из полярной системы переходим в декартову.

Потом наращиваем размерность из условия:
$$\begin{pmatrix}
 \rho_0 \\
  \rho 
 \end{pmatrix}\cdot v=0,$$
т.е. находим неизвестную компоненту $\rho_0$.
Уже потом можно нормировать.

Так, отсеивать ничего не придётся.

 Профиль  
                  
 
 Re: Глупый вопрос о генерации случайных векторов
Сообщение28.08.2018, 01:12 
Заслуженный участник


04/05/09
4582
И получится неравномерное распределение.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group