在matlab中使用rand()实现随机数
我正在使用Matlab函数round(rand(256))创建一个大小为256x256、随机分布为0和1的方阵在matlab中使用rand()实现随机数,matlab,matrix,Matlab,Matrix,我正在使用Matlab函数round(rand(256))创建一个大小为256x256、随机分布为0和1的方阵 我特别想做的是,我想以某种方式指定rand()在整个矩阵中随机生成和分布的1数(或任何其他相关函数)您可以使用randi函数来确定插入1的位置,然后把这些放进你的矩阵。例如,对于n项: matrix = zeros(256,256); onesIndices = randi([0 256*256],1,n); matrix(onesIndices) = 1; 这种方法的一个问题是,r
我特别想做的是,我想以某种方式指定rand()在整个矩阵中随机生成和分布的1数(或任何其他相关函数)您可以使用
randi
函数来确定插入1的位置,然后把这些放进你的矩阵。例如,对于n
项:
matrix = zeros(256,256);
onesIndices = randi([0 256*256],1,n);
matrix(onesIndices) = 1;
这种方法的一个问题是,randi
可以生成重复值,尽管在这个例子中,矩阵的大小很大,而矩阵的数量很少,这是不太可能的。您可以测试是否是这种情况,并“重新滚动:”因此,如果sum(sum(matrix))
小于n
您就知道有一个重复值
编辑:更好的方法是使用
randperm
而不是randi
,并且只取第一个n
元素。这应该可以防止重复和必须重新滚动 您可以使用randi
函数来确定插入位置,然后将这些位置放入矩阵中。例如,对于n
项:
matrix = zeros(256,256);
onesIndices = randi([0 256*256],1,n);
matrix(onesIndices) = 1;
这种方法的一个问题是,randi
可以生成重复值,尽管在这个例子中,矩阵的大小很大,而矩阵的数量很少,这是不太可能的。您可以测试是否是这种情况,并“重新滚动:”因此,如果sum(sum(matrix))
小于n
您就知道有一个重复值
编辑:更好的方法是使用
randperm
而不是randi
,并且只取第一个n
元素。这应该可以防止重复和必须重新滚动 您也可以用通常的方法生成随机值,但在对它们进行取整之前,请将它们作为向量进行排序。1的数量将在要剪切1或0的已排序向量中的索引中显示。例如,假设我们想要50个1:
matrix = rand(256,256);
vec = sort(reshape(matrix,[],1));
thresh = vec(50);
matrix(matrix <= thresh) = 1;
matrix(matrix > thresh) = 0;
matrix=rand(256256);
vec=排序(重塑(矩阵,[],1));
thresh=vec(50);
矩阵(矩阵阈值)=0;
您也可以用常规方法生成随机值,但在对其进行四舍五入之前,请将其作为向量进行排序。1的数量将在要剪切1或0的已排序向量中的索引中显示。例如,假设我们想要50个1:
matrix = rand(256,256);
vec = sort(reshape(matrix,[],1));
thresh = vec(50);
matrix(matrix <= thresh) = 1;
matrix(matrix > thresh) = 0;
matrix=rand(256256);
vec=排序(重塑(矩阵,[],1));
thresh=vec(50);
矩阵(矩阵阈值)=0;
是最直接的方法,它计算随机值的百分位来确定阈值
另外两个选择涉及:
sz = [256,256]; % matrix size
n = 256; % number of zeros
M = randperm(prod(sz)) <= n;
M = reshape(M,sz);
sz = [256,256]; % matrix size
n = 256; % number of zeros
M = randperm(prod(sz)) <= n;
M = reshape(M,sz);
您的意思是,对于较小的
n
(w.r.t.矩阵的大小),这种可能性较小。通常,重复的值很有可能出现。要生成50%的矩阵,使用这种方法可以滚动很多个。嗯,我的意思是,如果矩阵的大小与所需的矩阵的数量相比是大的。我会更新的,谢谢。谢谢大家的回答。Cris Luengo您的逻辑工作完美无瑕。您的意思是,对于较小的n
(w.r.t.矩阵大小)来说,这种可能性较小。通常,重复的值很有可能出现。要生成50%的矩阵,使用这种方法可以滚动很多个。嗯,我的意思是,如果矩阵的大小与所需的矩阵的数量相比是大的。我会更新的,谢谢。谢谢大家的回答。Cris Luengo你的逻辑完美无瑕。