how to do loop on rows matrix?

i have zeros matrix which has 3 rows and 6 columns. i want to allocate “1” on zeros matrix for each columns in order to get the result output like this attached picture. can anyone be kind to help me? thanks in advance

 Accepted Answer

VBBV
VBBV on 23 Dec 2022
Edited: VBBV on 23 Dec 2022
As mentioned in your question, if you have zeros matrix to start with and want to allocate 1s to specfiic zero locations, then you can get the matrix in snapshot using loop as below
A = zeros(3,6); % assume A as your zeros matrix
for k = 1:length(A)-2
if k == 1 | k == 2 | k == 3
A(k,k) = 1;
elseif k == 4
A(1,k) = 1;
A(2,k+1) = 1;
A(3,k+2) = 1;
end
end
A
A = 3×6
1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1

2 Comments

Thank you for your help, it means a lot to me. Then, what if I have a matrix with a large number of rows and columns like 25x100, should I write it to A(25,k+2)? Or maybe there is a more effective way?
It depends on how you want final matrix to look like. That is "in which specific positions you want to allocate 1s in zero matrix"

Sign in to comment.

More Answers (2)

Markus M.
Markus M. on 23 Dec 2022
Edited: Markus M. on 23 Dec 2022
It looks like the 1's are only needed on the diagonal elements.
You can do this with:
repmat(eye(3),1,2)

4 Comments

how to use that when i have size matrix 15x25?
A more general approach would be:
m = 15;
n = 25;
A = repmat(eye(m),1,ceil(n/m)) %repeat I and store in A.
A = 15×30
1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 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 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
A = A(:,1:n) %cut off last columns from Matrix A
A = 15×25
1 0 0 0 0 0 0 0 0 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 0 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 0 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 0 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 0 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 0 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 0 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 0 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 0 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 0 0 0 0 0 0 0 1
m and n define the size of your result.
Note that the repmat command results in a matrix that generally would be too wide ( here ). Therefore you have to cut off the last 5 columns (or take the first n columns of matrix ).
thank you, i’ll try this
this is worked! thank you so much, this helped me a lot.

Sign in to comment.

Instead of a for loop, you can use the toeplitz function:
% For 3x6:
c = [1 0 0 1 0 0];
r = [1 0 0];
output = toeplitz(r, c)
output = 3×6
1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1
% For 15 by 25
c = [1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1];
r = [1; zeros(15, 1)];
output = toeplitz(r, c)
output = 16×25
1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1

3 Comments

Didn't think about this interpretation. @Risma Fitriyani can you describe in more detail, what you want your matrix to look like?
i want the final output would be like the attached picture above (on my question), but i have different various size matrix, that’s why i asked you how if i have size matrix 15x25 because matrix with 3x6 is only example to explain my needs
@Risma Fitriyani did you not like my answer for the 15x25? Does the answer you accepted work?
Again, can you give the full output for your 15x25 matrix like @Markus M. directly asked you for? I'd like to see how my solution does not do what you want.

Sign in to comment.

Categories

Products

Community Treasure Hunt

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

Start Hunting!