Один простой трюк - выбрать каждое измерение из гауссовского распределения, а затем нормализовать:
from random import gauss
def make_rand_vector(dims):
vec = [gauss(0, 1) for i in range(dims)]
mag = sum(x**2 for x in vec) ** .5
return [x/mag for x in vec]
Например, если вы хотите 7-мерный случайный вектор, выберите 7 случайных значений (из гауссовского распределениясо средним 0 и стандартным отклонением 1).Затем вычислите величину результирующего вектора с помощью формулы Пифагора (возведите в квадрат каждое значение, добавьте квадраты и возьмите квадратный корень из результата).Наконец, разделите каждое значение на величину, чтобы получить нормализованный случайный вектор.
Если ваше число измерений велико, это дает сильное преимущество - всегда работает немедленно, генерируя случайные векторы, пока не найдете тот, который происходит сзначение меньше единицы приведет к зависанию вашего компьютера в более чем дюжине измерений или около того, потому что вероятность того, что кто-то из них станет квалифицированным, становится исчезающе малой.