Generate n pairs of random integers, whose 0 <= pairwise_sum <= k
3 次查看(过去 30 天)
显示 更早的评论
I want to generate n pairs of integers {(x_i, y_i)}, such that x_i + y_i <= k. One way I can think of is to generate one pair at a time
pairs = zeros(n,2)
for i=1:n
pairs(i,1) = randi(0,k);
pairs(i,2) = randi(0,k - pairs(i,1));
end
But, certainly, for loop is not favorable in matlab. Also, I'm not sure if that guarantees randomness either. I wonder if there's any existing function or a better way to do that?
Variation: consider a constraint that we want m% of generated pairs have pairwise_sum <= h ( h is some number < k). My approach won't work in this case. I'd love to get some hints to solve that as well.
Many thanks,
0 个评论
采纳的回答
José-Luis
2014-9-29
编辑:José-Luis
2014-9-29
num_pairs = 100;
max_val = 10;
tot_sum = randi(max_val + 1,[num_pairs,1]) - 1; %Need to include 0
result = rand(num_pairs,2);
result = bsxfun(@rdivide,result, sum(result,2));
result = round(bsxfun(@times,result,tot_sum));
plot(result)
I don't understand your second constraint.
3 个评论
José-Luis
2014-9-29
编辑:José-Luis
2014-9-29
Yes, it is equivalent, except that it applies it to both columns.
Two ways to do the second constraint pop to my mind:
- Generate 70 samples with that constraint and add 30 with one such that 7 < h < 10
- Trim the generated sample until you reach your condition (get rid of some of the rows)
Please accept the answer that best solves your problem.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!