如何生成一个D维随机向量,其元素是0到1之间的实数,其和等于一个常数值,如w小于或等于D.一个随机向量,如R:
R = [r1 r2 ... rD];
0<=ri<=1;
r1 +r2+ ... +rD = w;
w<=D;
inputs: w, D;
答案 0 :(得分:0)
如果您正在寻找这个?我用pi作为目标总和,但你可以使用任何东西:
x = rand(1000,1);
x = pi * x / sum(x);
sum(x) - pi
ans 4.4409e-16
答案 1 :(得分:0)
由于您没有指定随机数应遵循的分布(我希望答案不是&#34;统一&#34;),我能想出的最简单的解决方案涉及Dirichlet Distribution :
% Define the parameters...
D = 100;
w = 64;
% Draw a sample of D values from the Dirichlet Distribution...
a = ones(1,D);
R = gamrnd(repmat(a,1,1),1,1,D);
R = R ./ repmat(sum(R,2),1,D);
% Adjust R according to w...
R = R .* w;
% Test the output with tolerance...
R_sum = sum(R);
abs(R_sum - w) < (1e4 * eps(min(R_sum,w)))