# How can I remove for loop in the following code that change the entries of a given vector?

3 views (last 30 days)
Hassan on 7 Jan 2018
Edited: Matt J on 7 Jan 2018
Hello, I am trying to vectorize the following simple code
if true
A=[-1;3;0;-4];
B=zeros(size(A));
for i=1:4
if A(i)<0
B(i)=-(A(i));
elseif A(i)==0
B(i)=1;
else
B(i)=A(i);
end
B=B(:);
end
end
Please, how do I write the above code in such a way that there is no for loop, and still it works?

Matt J on 7 Jan 2018
Hassan on 7 Jan 2018
Ok

Star Strider on 7 Jan 2018
Try this:
A=[-1;3;-2;-4];
B = A;
B(A<0) = -A(A<0)

Star Strider on 7 Jan 2018
This works:
A=[-1;3;0;-2;-4;0];
B = A;
B(A<0) = -A(A<0) % Change Sign Of ‘A<0’
B(A==0) = randi(9, size(A(A==0),1), size(A(A==0),2)) % Replace Values Of ‘A==0’ With Random Single Integers
I changed ‘A’ to include 2 zero values to demonstrate the code.
Hassan on 7 Jan 2018
ok
Star Strider on 7 Jan 2018
Note that it is necessary to determine the number of zeros, so the vector of non-zero values that replaces them is the same size. I used random single-digit positive integers, although any vector with the same number of non-zero values as there are zero values in the vector will work.

Matt J on 7 Jan 2018
Edited: Matt J on 7 Jan 2018
B=abs(A);
B(~A)=1; %or any other value