Мне нужно случайным образом выбрать n-мерный вектор длиной 1. Лучше всего выбрать случайную точку на сфере и нормализовать ее:
Код: Выделить всё
import random
def point(n):
sq = 0
v = []
while len(v) < n:
x = 1 - 2*random.random()
v.append(x)
sq = sq + x*x
if sq > 1:
sq = 0
v = []
l = sq**(0.5)
return [x / l for x in v]
Единственная проблема заключается в том, что объем n-шара уменьшается с увеличением размера, поэтому использование равномерного распределения из random.random занимает очень много времени даже для небольшого n, например 17. Есть ли лучший (более быстрый) способ получить случайную точку на n-сфере?
Подробнее здесь:
https://stackoverflow.com/questions/380 ... a-n-sphere