如何在 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)))
您可以创建一个包含 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
比这个例子有更多的特性。
例如,如何随机生成一个包含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)))
您可以创建一个包含 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;
不确定是否比其他示例更好,但这是一种方法。我会说这是与 randsample
比这个例子有更多的特性。