填充具有1的特定数字的零矩阵

时间:2016-01-04 11:17:43

标签: matlab matrix

我遇到了问题。我有一个零矩阵600x600。我需要随机填充这个矩阵1080 1 s。有什么建议吗?

3 个答案:

答案 0 :(得分:6)

或者,因此使用内在例程randperm

A = zeros(600);
A(randperm(600^2,1080)) = 1;

答案 1 :(得分:3)

A = sparse(600,600);               %// set up your matrix
N=1080;                            %// number of desired ones
randindex = randi(600^2,N,1);      %// get random locations for the ones
while numel(unique(randindex)) ~= numel(randindex)
    randindex = randi(600^2,N,1);  %// get new random locations for the ones
end 
A(randindex) = 1;                  %// set the random locations to 1

利用randi10801之间随机生成600^2个数字,即您向量中的所有可能位置。 while循环存在,以防其中一个位置出现两次,最终小于1080 1

在这种情况下,您可以为矩阵使用单个索引的原因是linear indexing

与其他答案相比,性能差异很大,这会初始化稀疏矩阵,因为1080/600^2 = 0.3%非常稀疏,因此会更快。 (感谢@Dev-iL

答案 2 :(得分:2)

这是一种方法,

N = 1080; % Number of ones
M = zeros(600); % Create your matrix
a = rand(600^2,1); % generate a vector of randoms with the same length as the matrix
[~,asort] = sort(a); % Sorting will do uniform scrambling since uniform distribution is used
M(asort(1:N)) = 1; % Replace first N numbers with ones.