Filter löschen
Filter löschen

How can I calculate a weighted mean in Matlab?

373 Ansichten (letzte 30 Tage)
Jan-Erik
Jan-Erik am 18 Feb. 2013
I have a 180-by-360 matrix of (surface temperature) values and I want to calculate a weighted average of all values given in this matrix. However, I need to weight these values with respect to latitude. Is there a way to calculate a weighted mean in Matlab? Please help me.
Thanks in advance for any help!
- Jan-Erik
  1 Kommentar
shelley
shelley am 20 Okt. 2015
Normally taking dim 1 mean of some, say 3x5 matrix A, can be seen as w=[1/3 1/3 1/3], and w*A returns you the answer.
Now if we want to take dim 1 weighted mean of A, we can set our weight in w = [1/6 2/3 1/6], then take w*A, which should return you a 1x5 row vector.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 18 Feb. 2013
Bearbeitet: Matt J am 18 Feb. 2013
If A is your 180x360 matrix and W is a 180x1 vector of weights for the latitudes, do
weighted_mean = mean(W.'*A,2);
  6 Kommentare
Jason Garcia
Jason Garcia am 28 Jan. 2014
weighted_mean = mean(bsxfun(@times,A,w'),2)
Matt J
Matt J am 28 Jan. 2014
weighted_mean = mean(bsxfun(@times,A,w'),2)
If that's what the OP intended, it would be more efficient to do
weighted_mean=w'.*mean(A,2);

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

John Hock
John Hock am 28 Apr. 2019
Hi Everyone
I just want to ask one thing that if i have 2d array 2*4 and want to get weighted average with vector of 1*4
i want first row of A get multiplied with B and give weighted average as an output similarly for next row.
Please help
  2 Kommentare
Image Analyst
Image Analyst am 28 Apr. 2019
Try
B = repmat(B, [2, 1]) % Make B 2*4
weightedMeans = sum(A.*B, 1); % Get weighted means within a row going across columns.
stelios loizidis
stelios loizidis am 27 Mai 2019
Hello,
I have the following questuin: I have a matrix e.g
[5 3 3 1
3 4 5 2
5 0 0 0
3 4 5 2]
For this matrix I have to make a weighted average for each row. That is [5+3+(4/5)*(3+1)] /4=16/5. Also, if there is only one number and the zero (row 3) the weighted average should be [5+0+0+0] / 1 =5 and the end we choose the largest weight average. How does this work?

Melden Sie sich an, um zu kommentieren.


Micke Malmström
Micke Malmström am 3 Okt. 2019

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by