如何在 Matlab 中创建一个随机分布数字 1 和 3 的矩阵 (100 x 100),而在每列中我必须有 10% 的数字 1 和 90% 的数字 3?这必须是随机分布。
任何人都可以帮助我吗?
万分感谢!
如何在 Matlab 中创建一个随机分布数字 1 和 3 的矩阵 (100 x 100),而在每列中我必须有 10% 的数字 1 和 90% 的数字 3?这必须是随机分布。
任何人都可以帮助我吗?
万分感谢!
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。
自从我成为 Matlab TA 以来已经有几年了,但你也应该能够这样做:
v = [1*ones(10*100,1) ; 3*ones(90*100,1)];
v = reshape( v(randperm(length(v))) ,100,100)
@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。