如何生成欧氏长度为1的随机均匀分布向量



我正在尝试随机生成均匀分布的向量,其欧几里得长度为1。所谓均匀分布,我的意思是向量的每个条目(坐标(都是均匀分布的。

更具体地说,我想创建一组,比如1000个向量(让我们称它们为V_I,I=1,…,1000(,其中这些随机向量中的每一个都有单位欧几里得长度和相同的维度V_I=(V_1i,…,V_ni('(让我们说n=5,但算法应该适用于任何维度(。如果我们看看例如v_1i的分布,每个v_i的第一个元素,那么我希望它是均匀分布的。

在所附的MATLAB示例中,您可以看到,您不能简单地从均匀分布中绘制随机向量,然后将向量归一化为欧几里得长度1,因为元素在向量之间的分布不再均匀。

有没有一种方法可以生成这组向量,使单个元素在向量集上的分布是均匀的?

谢谢你的意见。

附言:MATLAB是我们的首选语言,但任何语言的解决方案都是受欢迎的。

clear all
rng('default')

nvar=5;
sample = 1000;

x = zeros(nvar,sample);

for ii = 1:sample

y=rand(nvar,1);  
x(:,ii) = y./norm(y);

end

hist(x(1,:))
figure
hist(x(2,:))
figure
hist(x(3,:))
figure
hist(x(4,:))
figure
hist(x(5,:))

你想要的是无法实现的。

长度为1的矢量位于圆(或球体或超球体,具体取决于维度的数量(上。让我们关注2D的情况,如果不能在那里完成,那么很明显,也不能在更多维度上完成。

因为这些点在一个圆上,它们的x和y坐标是相关的,所以可以根据另一个来计算一个。因此,x和y坐标的分布不能独立定义。我们可以定义一个坐标的分布,为其生成随机值,但另一个坐标必须从第一个坐标开始计算。

让我们在一个x坐标一致的半圆上做点(可以通过在y坐标上添加一个随机符号扩展到一个完整的圆(:

N = 1000;
x = 2 * rand(N,1) - 1;
y = sqrt(1 - x.^2);
plot(x,y,'.')
axis equal
histogram(y)

生成的图显示了明显的不均匀分布,在y=1附近生成的样本比在y=0附近生成的要多得多。如果我们在y坐标上添加一个随机符号,那么y=1y=-1附近的样本将比y=0附近的样本多。

相关内容

  • 没有找到相关文章

最新更新