如何在 Matlab 中随机生成 n 个 0 和 m 个 1 的矩阵?

How to randomly generate a matrix with n 0s and m 1s in Matlab?

例如,如何随机生成一个包含8个0和4个1的1×12矩阵?

喜欢这个矩阵[1 0 0 1 0 0 0 1 0 0 1 0]

如果我再次生成,它会 returns 一个不同的矩阵 [0 0 1 0 0 1 1 0 1 0 0 0]

创建一个向量,以所需数量的 1 开头,然后是所需数量的 0 并使用 randperm 对其进行随机排列:

n = 8;
m = 4;
M = [ones(m,1), zeros(n,1)];
M = M(randperm(numel(M)))

或者您可以稍作不同:http://www.mathworks.com/matlabcentral/answers/83289-how-can-i-create-a-random-binary-matrix-with-a-specified-number-of-1-s-and-0-s

您可以创建一个包含 12 个零的向量,然后使用 randsample 来选择四个数字,然后组成一个:

a = zeros(1,12);
a(randsample(12,4)) = 1;

注意:这需要'Statistics and Machine Learning Toolbox'。 如果没有这个,你将无法使用 randsample.

这个也可以。

x = zeros(12,1);
tmp = rand(12,1);
[~,ind] = sort(tmp);
x(ind(1:4)) = 1;

不确定是否比其他示例更好,但这是一种方法。我会说这是与 的解决方案类似的解决方案,但这个解决方案不需要统计工具箱。也有可能这个解决方案可能不像 matlabs 解决方案那样优雅,并且 randsample 比这个例子有更多的特性。