Please help me in generating a matrix of ones for a given matrix
2 次查看(过去 30 天)
显示 更早的评论
Suppose if I already have a matrix 'X' having only one '1' in each row for example matrix given below
X = [0 0 0 0 1 0 0 0 0 0;
0 1 0 0 0 0 0 0 0 0;
0 0 1 0 0 0 0 0 0 0;
1 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 1 0 0 0 0]
i need a matrix a few (specified number) '1's after existing '1' in each row for example output matrix is
Y = [0 0 0 0 1 1 1 1 0 0;
0 1 1 1 1 1 0 0 0 0;
0 0 1 1 1 0 0 0 0 0;
1 1 0 0 0 0 0 0 0 0;
0 0 0 0 0 1 1 1 1 0]
code for matrix 'X'is
P = 5; % The number of competitive projects
T = 10; % The number of time periods
D = [4; 5; 3; 2; 4];
excludedcount = D-1;
X = zeros(P,T);
for row = 1:P
rv = [1, zeros(1, T - excludedcount(row) - 1)];
X(row, 1 : (T - excludedcount(row))) = rv(randperm(numel(rv)));
end
1 个评论
采纳的回答
dpb
2016-6-30
"Dead-ahead" solution is simply
D = [4; 5; 3; 2; 4];
for row = 1:P
ic=find(X(row,:); % the '1' column index
X(row,ic:ic+D-1)=ones(1,D); % insert the ones vector at that location
end
With some thought this could undoubtedly be transformed to use arrayfun and the multiple outputs from find on the array w/o the explicit loop; whether that would be any faster is questionable I'd venture...
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!