Please help me in generating a matrix of ones for a given matrix

3 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

dpb
dpb am 30 Jun. 2016
"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...
  1 Kommentar
MANISH KUMAR
MANISH KUMAR am 6 Jul. 2016
if any row contains zeros only then it shows error in this line
X(row,ic:ic+D(row)-1)=ones(1,D(row));
For example matrix is
Y =
0 1 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
in this matrix last two rows contains zeros only. So this code doesn't work.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by