# Calculate weighted average of a 2D matrix

40 Ansichten (letzte 30 Tage)
Abdul Wahab am 7 Aug. 2018
Dear all, I hope all is well. I am working with a 2D Matrix that is 376x481. I would like to calculate the weighted average of this matrix for each row, such that the desired output should be sized 376 X 1. I would greatly appreciate any help with this problem.
Thanks.
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

James Tursa am 7 Aug. 2018
E.g.,
w = 1x481 vector of weights
M = your 376x481 matrix of values
result = sum(M.*w,2) / sum(w);
or
sum(bsxfun(@times,M,w),2) / sum(w);
##### 5 Kommentare3 ältere Kommentare anzeigen3 ältere Kommentare ausblenden
James Tursa am 8 Aug. 2018
Can you provide us with some info on what data this matrix contains and how it was generated? Then maybe we can make a stab at what you might want to do for weights.
Abdul Wahab am 8 Aug. 2018
This matrix is populated with a non-dimensional variable (376 rows) and associated time history of 481 hours. So each row is then a representation of how this non-dimensional variable is changing through 481 hours (one column for every hour). This non-dimensional number varies in a specific order where it contains both unique and non-unique values of this non-dimensional variable. I would like to figure out the weight vector of the non-unique and unique values in every row and get the weighted average instead of a simple mean. I hope this provides some more insight into my problem.

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (1)

Thorsten am 8 Aug. 2018
X = rand(376, 481);
w = rand(1, size(X, 2));
Xw = bsxfun(@times, X, w);
m = mean(Xw, 2);
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
stelios loizidis am 23 Mai 2019
Hello,
I saw the commands you wrote above and I have the following question; 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 rest 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.

### Kategorien

Mehr zu Configure Simulation Conditions 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