How to supplement the matrix?
3 views (last 30 days)
Show older comments
Hello! I cleaned my signal from emissions, it is in the form of a matrix, but there I used i-1, in consequence of which, instead of 1100, I now have 1099 values, how can I add the last value?\
for i = 1:length(d)-1 % Error 1100 1099
if g(i)-50>= g(i+1);
f(i)=g(i);
end
end
6 Comments
Jan
on 8 Jul 2019
@Lev: |zeros()< does not convert anything to zeros. Please read the documentation:
doc zeros
to find out, that this is a pre-allocation of the output. Letting an array grow iteratively is extremely inefficient. Matlab has to allocation a new array in each iteration. So:
r = [];
for k = 1:1e6
r(k) = rand;
end
needs 8*1e6 bytes finally, but intermediately 8*sum(1:1e6) bytes are allocated: 4 TeraByte!
I do not understand the meaning of your comment. If you detect outliers by subtracting pairs elements, of course there is one element less in the output.
Answers (2)
dpb
on 5 Jul 2019
Adding to Stephen's answer Matlab syntax, the crystal ball says
for i = 1:length(d)-1 % Error 1100 1099
if g(i)-50>= g(i+1);
f(i)=g(i);
end
end
becomes
f=zeros(size(g));
ix=diff(g)<-50;
f(ix)=g(ix);
0 Comments
Lev Mihailov
on 5 Jul 2019
5 Comments
dpb
on 5 Jul 2019
c can only have length(d)-1 elements in it...as has been said multiple times before, preallocate it to the size wanted or compensate that there will always be one less array element since you're dealing with diff() functionality that produces one less element by its very nature.
dpb
on 5 Jul 2019
Edited: dpb
on 5 Jul 2019
In
for chek = 1:length(d)-1
if g(chek )-50>= g(chek +1);
c(chek )=10;
else g(chek )+50 <= g(chek +1);
c(chek)=g(chek );
end
end
the else clause should be elseif it appears.
What is the value for c if abs(diff(g))<50?
Again, use Matlab array syntax; the above loop construct (presuming the "elseif" and zero for then missing "else" clause)
c=zeros(size(g)); % preallocate to same size as g array
ix=diff(g)<-50;
c(ix)=10;
ix=diff(g)>=50;
c(ix)=g(ix);
You need to define what happens in the other cases not satisfied...if they're to remain unchanged, then use
c=g;
for initialization instead of zeros
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!