Matrix from a for FOR loop with IF conditioning
1 次查看(过去 30 天)
显示 更早的评论
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?
0 个评论
采纳的回答
Azzi Abdelmalek
2014-4-25
编辑:Azzi Abdelmalek
2014-4-25
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
0 个评论
更多回答(2 个)
Jos (10584)
2014-4-25
n = size(A,1)
...
B(i,:) = x
...
1 个评论
Jos (10584)
2014-4-25
or using indexing alone
B = A ; % keep the original
B(2:2:end,:) = B(2:2:end,end:-1:1)
Geoff Hayes
2014-4-25
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!