How to create a weighted average for the following data?

1 view (last 30 days)
I am trying to create an average of the 'average' column below located in my Avg structure (Avg.average, Avg.population, etc). However, each 15x15 Avg.average array is not weighted the same, how would I average these to include the weights of the 'population' field (seen below) and output a single 15x15 array?

Answers (1)

James Tursa
James Tursa on 4 Apr 2017
Edited: James Tursa on 4 Apr 2017
One way:
result = sum(bsxfun(@times,reshape([Avg.population],1,1,[]),reshape([Avg.average],15,15,[])),3)/sum([Avg.population])
Or in pieces that are easier to follow:
p = [Avg.population];
a = [Avg.average];
p3d = reshape(p,1,1,[]);
a3d = reshape(a,15,15,[]);
result = sum(bsxfun(@times,p3d,a3d),3)/sum(p);


Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!