How to create a weighted average for the following data?

4 vues (au cours des 30 derniers jours)
Ibro Tutic
Ibro Tutic le 4 Avr 2017
Modifié(e) : James Tursa le 4 Avr 2017
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?

Réponses (1)

James Tursa
James Tursa le 4 Avr 2017
Modifié(e) : James Tursa le 4 Avr 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);

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by