Matrix from a for FOR loop with IF conditioning

1 view (last 30 days)
I have the following problem:
A = [1 2 3; 4 5 6; 7 8 9]
for i = 1:n
if rem(i,2)== 0
x = fliplr(D(i,:))
else x = D(i,:)
end
B(i) = x
end
I'm trying to get the B matrix that should look like
B = [1 2 3; 6 5 4; 7 8 9]
but I get the following error message instead
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in back_and_forth (line 16)
B(i) = x
Could anyone help me with this?

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 25 Apr 2014
Edited: Azzi Abdelmalek on 25 Apr 2014
A = [1 2 3; 4 5 6; 7 8 9]
A(2:2:end,:)=fliplr(A(2:2:end,:))
%Or if you want to do it with a for loop
A = [1 2 3; 4 5 6; 7 8 9]
n=size(A,1)
B=A;
for i = 1:n
if rem(i,2)== 0
B(i,:) = fliplr(A(i,:))
end
end

More Answers (2)

Jos (10584)
Jos (10584) on 25 Apr 2014
n = size(A,1)
...
B(i,:) = x
...
  1 Comment
Jos (10584)
Jos (10584) on 25 Apr 2014
or using indexing alone
B = A ; % keep the original
B(2:2:end,:) = B(2:2:end,end:-1:1)

Sign in to comment.


Geoff Hayes
Geoff Hayes on 25 Apr 2014
Hi Chris,
I'm guessing that n should be 3 in this example, and that in the code D is set (at some point) with A.
So the problem is with your assignment, B(i)=x. You are assigning a single element of B to a row vector of three elements. This may be fine if B were defined to be a cell array (and you had written B{i}), but since you want it to be a matrix, then your assignment should mimic how you got x but in the opposite "direction".
Note that the assignment for x is x = D(i,:) or x = fliplr(D(i,:)). In either case you extract all columns (using the :) from the ith row of D. So when you assign this vector to B it should be the "same" - set all columns (using the :) of the ith row of B to x:
B(i,:) = x;
Note that to avoid the B is growing at each iteration warning, you could just initialize B at the beginning to:
B = zeros(size(D));
Hope that this helps!
Geoff

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!