MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Mark
on 12 Mar 2013

I have an R vector and a U vector. The R vector contains mostly zeros but has a couple of values. The U vector is a shorter length than the R vector and contains no zeros. I want to make a U_final vector which has the values of the U vector at the same locations where the R vector values are non-zero. My attempted code is below. It iterates through fine, but the end result is the last value in U in all locations where R is non-zero rather than all values of U in the appropriate non-zero locations of R. I'm using U = [0.0137;0.0081] and R = [0;0;0;72;0;90]. I'd like the output to be U_final = [0;0;0;0.0137;0;0.0081]

for i = 1:length(R) for j = 1:length(U) if R(i,1) ~= 0 U_final(i,1) = U(j,1) else U_final(i,1) == 0 end end end

Answer by Teja Muppirala
on 12 Mar 2013

Accepted answer

No need to iterate. MATLAB makes this simple with logical indexing.

U = [0.0137;0.0081]; R = [0;0;0;72;0;90];

U_final = R; U_final(R~=0) = U

But the number of nonzeros in R needs to be equal to the length of U.

Answer by Youssef KHMOU
on 12 Mar 2013

Edited by Youssef KHMOU
on 12 Mar 2013

hi try this , BUT the number of non zeros in R must be the same as the length of U:

R=zeros(100,1); R(2:4:55)=rand; % R contains some values ( 14 elements !) U=rand(14,1); % U is Shorter than R and contains non zeros vals index=find(R~=0); %locations where R has non zeros . U_final=zeros(size(R)); % this is optional U_final(index)=U;

## 1 Comment

## Walter Roberson

Direct link to this comment:http://www.mathworks.com/matlabcentral/answers/66795#comment_135849

Note that U_final(i,1) == 0 is a comparison statement, not an assignment.