performance - Faster way to decrease some items in a vector in Matlab -
i'm looking faster way decrease value of numbers in vector in matlab, illustration i've vector:
vector a=[1 21 35 44 45 67 77 83 93 100]
then have remove elements 35,45,77, so:
removevector b=[3,5,7] removeelements c=[35,45,77]
after remove elements, should be:
vector=[1 21 43 65 80 90 97]
note besides remove element, next elements decrease values in 1, i've code in matlab:
a(:,b) = []; b = fliplr(b); i=1:size(a,2) j=1:size(c,2) if(a(1,i)>=c(1,j)) a(1,i) = a(1,i) -1; end end end but slow, m0=2.8*10^-3 seconds, there faster algorithm? believe matrix operations faster , elegant.
@geoff has overall approach, adjustment can done in o(n) not o(n*k):
adjustment = zeros(size(a)); adjustment(b(:)) = 1; = - cumsum(adjustment); a(b(:)) = []; performance algorithm matlab vector
No comments:
Post a Comment