如何在SUM的5x5矩阵中随机化并生成0-50的数字,或者在右侧打印每行?
+ 有没有办法在生成数字之前给个别数字加权?
请帮忙
谢谢!
答案 0 :(得分:1)
要生成0到50之间的整数随机矩阵(采样替换),您可以使用
M = randint(5,5,[0,50])
要使用每行的总和打印矩阵,请执行以下命令
[M sum(M,2)]
要使用不同的发行版,有许多技巧,但最简单的方法之一是使用统计和机器学习工具箱中的datasample
函数。
% sample from a truncated Normal distribution. No need to normalize
x = 0:50;
weights = exp(-0.5*(x-25).^2 / 5^2);
M = reshape(datasample(x,25,'Weights',weights),[5,5])
修改强>
根据您的评论,您希望执行随机抽样无需替换。如果权重是非负整数,你可以通过模拟经典的球 - 骨实验来执行这样的随机抽样而无需替换。
首先创建一个包含每个值的适当数量的数组。
示例:如果我们的值为0,1,2,3,4且具有以下权重
然后我们首先创建urn
数组
>> urn = [0 0 1 1 1 2 2 2 2 2 3 3 3 3 4];
然后,我们将使用randperm
>> urn_shuffled = urn(randperm(numel(urn)))
urn_shuffled =
2 0 4 3 0 3 2 2 3 3 1 2 1 2 1
要选择5个元素而不进行替换,我们只需选择urn_shuffled
的前5个元素。
我们可以在给定每个值的权重数组的情况下以编程方式构造它,而不是键入整个urn
数组。例如
weight = [2 3 5 4 1];
urn = []
v = 0
for w = weight
urn = [urn repmat(v,1,w)];
v = v + 1;
end
在您的情况下,urn将包含许多元素。一旦你洗牌,你将选择前25个元素,并将它们重新整形为矩阵。
>> M = reshape(urn_shuffled(1:25),5,5)
答案 1 :(得分:0)
要绘制随机整数均匀分布的数字,您可以使用randi
函数:
>> randi(50,[5,5])
ans =
34 48 13 28 13
33 18 26 7 41
9 30 35 8 13
6 12 45 13 47
25 38 48 43 18
打印每行的总和可以使用sum
函数和2
作为维度参数来完成:
>> sum(ans,2)
ans =
136
125
95
123
172
要对各种随机数进行加权,请参阅此question。