在10维单位球面上生成随机点

Mil*_*tel 2 python random

我需要生成一个在单位球体上以 10 个方向(10 个随机数的集合)均匀采样的向量。因此,10 个值的平方和应为 1。

\n\n

这正是我需要生成这些点的问题:

\n\n
\n

实现感知器算法并在 \xe2\x84\x9d 10中的以下\n 合成数据集上运行它: pick \xe2\x88\x97 = [1,0,0,\xe2\x80\xa6,0]; 通过在单位球面上随机均匀采样生成 1000\n 个点,然后删除那些边距小于 0.1 的点;生成\n 标签 = 符号((\xe2\x88\x97) T )。

\n
\n

ali*_*ift 6

正如@Andrex 所建议的,这是正确的解决方案:

import numpy as np
import math

s = np.random.normal(0, 1, 10)

norm=math.sqrt(sum(s*s))
result=s/norm
Run Code Online (Sandbox Code Playgroud)

result答案在哪里。您可以评估结果:

sum([x*x for x in result])
1.0
Run Code Online (Sandbox Code Playgroud)


And*_*rex 5

有一个数学定理说,如果X = (X1,...,XN)是一个服从Xi标准正态分布的向量,那么X/NORM(X)在单位球面上是均匀的,其中NORM是欧氏范数。因此,您必须从标准正态分布(使用 numpy?)中采样 10 个点,然后对结果进行归一化。