How to create an array using for loop?

3 views (last 30 days)
Patrick
Patrick on 6 Nov 2012
Im trying to create an array B where the values are natural logs of A if greater than 1. If value is less or equal to 1 then I want 39 to be added to these values.
A=[8 14 3;-13 1 42;-39 -8 15];
B=zeros(size(A));
for k=1:size(A,1);
l=1:size(A,2);
if (A(k,l))>1
B(k,l)=log(A(k,l));
else
B(k,l)=A(k,l)+39 ;
end;
end;
I'm not sure where I'm going wrong. Can you please help me? Thanks
  2 Comments
per isakson
per isakson on 6 Nov 2012
Why do you think it goes wrong?
Patrick
Patrick on 7 Nov 2012
Because the values should be the log of and all I get is just the sum of values A + 39.

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 7 Nov 2012
You have
l=1:size(A,2);
so in the line
if (A(k,l))>1
you are doing a vector test, equivalent to
if A(k,:)>1
which is equivalent to
if A(k,[1 2 3])>1
When you test a vector in an "if" statement, the result is considered true only if all of the sub-results are considered true, just as if all() had been wrapped around the test, like
if all(A(k,:) > 1)
as some of your A entries do not satisfy that condition, the test is false and the else portion is executed.
  2 Comments
Patrick
Patrick on 8 Nov 2012
Sounds reasonable but how do I put >1 to make it actually work then?
Image Analyst
Image Analyst on 8 Nov 2012
Instead of
l=1:size(A,2);
you'd have a for loop over l (bad variable name by the way):
for l = 1 : size(A, 2)

Sign in to comment.


Andrei Bobrov
Andrei Bobrov on 7 Nov 2012
l = A > 1;
B = A;
B(l) = log(B(l));
B(~l) = B(~l) + 39;
  1 Comment
Jan
Jan on 7 Nov 2012
Edited: Jan on 7 Nov 2012
Just to avoid confusions: The index is an lowercase "L", not a "1" (one).

Sign in to comment.

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!