How to create an array using for loop?

3 Ansichten (letzte 30 Tage)
Patrick
Patrick am 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 Kommentare
per isakson
per isakson am 6 Nov. 2012
Why do you think it goes wrong?
Patrick
Patrick am 7 Nov. 2012
Because the values should be the log of and all I get is just the sum of values A + 39.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Walter Roberson
Walter Roberson am 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 Kommentare
Patrick
Patrick am 8 Nov. 2012
Sounds reasonable but how do I put >1 to make it actually work then?
Image Analyst
Image Analyst am 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)

Melden Sie sich an, um zu kommentieren.


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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by