vectorization - Accelerating Iterations- MATLAB -
consider 2 vectors a = [20000000 x 1] , b = [20000000 x 1 ]
i need find sum of corresponding every unique element of b.
although looks easy, taking forever in matlab.
currently, using
u = unique(b); length_u = length(u); c = zeros(length_u,1); = 1:length_u c(i,1) = sum(a(b==u(i))); end is there anyway make run faster? tried splitting loop , running 2 parfor loops using parallel computing toolbox(because have 2 cores). still takes hours.
p.s: yes, should better computer.
you must see this answer first.
if must, can use combination of histc , accumarray
a = randi( 500, 1, 100000 ); b = randi( 500, 1, 100000 ); ub = unique( b ); [ignore idx] = histc( b, [ub-.5 ub(end)+.5] ); c = accumarray( idx', a' )'; see toy comparison naive for-loop implementation on ideone.
how work?
we use second outout of histc map elements of b (and later a) bins defined elements of ub (the unique elements of b).
accumarray used sum entries of a accorind mapping defined idx.
note: assume unique elements of b @ least 0.5 apart.
Comments
Post a Comment