2

如何在 Matlab 中创建一个随机分布数字 1 和 3 的矩阵 (100 x 100),而在每列中我必须有 10% 的数字 1 和 90% 的数字 3?这必须是随机分布。

任何人都可以帮助我吗?

万分感谢!

4

3 回答 3

1
v = [1*ones(10,1) ; 3*ones(90,1)];
A = zeros(100,100);
for i = 1:100,
   A(:,i) = v(randperm(100));
end

或没有for循环

A = zeros(100,100);
v = [1*ones(10*100,1) ; 3*ones(90*100,1)];
A(:) = v(randperm(100*100));

虽然如果您以后想以不同的方式显式控制列,第一个可能会更好。

编辑:实际上,一个微妙的观点。第一段代码保证每列正好有 10 个 1 和 90 个 3。第二段代码不做这个保证,只是整个矩阵有 1000 个 1 和 9000 个 3。

于 2012-05-21T21:08:54.350 回答
1

自从我成为 Matlab TA 以来已经有几年了,但你也应该能够这样做:

v = [1*ones(10*100,1) ; 3*ones(90*100,1)];
v = reshape( v(randperm(length(v))) ,100,100)
于 2012-05-21T21:23:53.840 回答
1

@ChrisA 和 @JosephLust 的答案将为您提供一个数组,其中每列恰好有10 个 1 和 90 个 3,以随机顺序排列。这可能是您需要的,但是由于您提到它必须是随机分布,也许您想要的是每列应该包含有 10% 的机会为 1 和 90% 的机会为 3 的条目(这是不一样的)。

如果你想要后者,试试这个:

vals = [1,3,3,3,3,3,3,3,3,3];
idx = randi(10,100,100);
data = vals(idx);

中间行创建一个 100x100 矩阵,其中每个条目是 1 到 10 之间的随机整数。然后将其用于索引值数组,其中一个是 1,其中九个是 3。

于 2012-05-22T08:40:59.227 回答