Wednesday, 15 August 2012

performance - Faster way to decrease some items in a vector in Matlab -



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