Filter löschen
Filter löschen

Insert "1" at specific ranges in a matrix

1 Ansicht (letzte 30 Tage)
monkey_matlab
monkey_matlab am 27 Nov. 2016
Bearbeitet: Andrei Bobrov am 28 Nov. 2016
Hello,
I am trying to generate a 40 x 360 matrix that has 1's every 9 columns. After the 9th column, the 1's should now be in the second row and from columns 10-18. After the 18th column, the 1's will now be in the 3rd row and from columns 19-27 and so on...
The matrix will look like this:
1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 ...
...
Is there an easy way to generate this matrix?
This is what I have so far :-(
aa = zeros(40,360);
bb = ones(1,9);
Thanks for your help!

Akzeptierte Antwort

Image Analyst
Image Analyst am 27 Nov. 2016
Here's a way that you may consider "simple":
aa = zeros(40,360);
for row = 1 : size(aa, 1)
col = 9*(row-1)+1;
aa(row, col:col+8) = 1;
end

Weitere Antworten (1)

Andrei Bobrov
Andrei Bobrov am 28 Nov. 2016
Bearbeitet: Andrei Bobrov am 28 Nov. 2016
z =repmat({ones(1,9)},40,1);
out = blkdiag(z{:});
or
out = kron(eye(40),ones(1,9));

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by