## Calculating a weighted average of multiple matrices

### John (view profile)

on 24 Feb 2012
Latest activity Edited by Mona M Kanafi

on 24 Oct 2013

### Andrei Bobrov (view profile)

Hello,

I was hoping that perhaps somebody could help me out with a problem that I have. It is a relatively simple operation (a weight average), just difficult to code.

Say I import 2 3x3 matrices into a cell array using the code below.

```C = cell(2,1);
for ii = 1:2
C{ii} = importdata(['matrix' num2str(ii) '.txt']) ;
end
```

These matrices are transitional probability matrices.

I would like to calculate a weighted 'average' matrix of these 2 matrices. Unfortunately I cannot simply just calculate the average, its needs to be a weighted average.

Say for example the 2 matrices are:

```	0.0	0.5	0.5	2
A = 	0	0	1	4
0	0.6	0.4	7

0.2	0.0	0.8	5
B = 	0	0	0	0
0.3	0.0	0.7	3
```

The 4th column contains the number of counts for that particular row.

The weighted average formula would be

```P(x) = P_A(x) x [1-B_N/(A_N+B_N)]  + P_B(x) x [1-A_N/(A_N+B_N)]
```

Where,

P_A(x) represents the probability value in the same row at cell x for matrix A.

P_B(x) is the same thing for matrix B.

A_N is the total number of counts for the same row we are dealing with in matrix A

B_N is the total number of counts for the same row we are dealing with in matrix B

Using the numbers, the first cell would be:

` = 0 x [1-5/(2+5)] + 0.2 x [1-2/(2+5)] = 0.14`

So the full weighted average matrix would be

```	0.14	0.14	0.71
C=	0	0	1
0.1	0.4	0.5
```

I would really appreciate any help to code this as I'm fairly inexperienced with matlab. In practice I have about 100 matrices but I just presented 2 as an example.

Sincere Thanks

John

## Products

No products are associated with this question.

### Andrei Bobrov (view profile)

on 24 Feb 2012

```A =[        0          0.5          0.5            2
0            0            1            4
0          0.6          0.4            7];
```
```B =[      0.2            0          0.8            5
0            0            0            0
0.3            0          0.7            3];
```
```C1 = cat(3,A,B);
p1 =  bsxfun(@rdivide,C1(:,end,:),sum(C1(:,end,:),3));
C = sum(bsxfun(@times,C1(:,1:end-1,:),p1),3)
```

John

### John (view profile)

on 28 Feb 2012

Hello Andrei,

Thank you for your help with my weighted average problem.

I'm just wondering if the code for pl and C needs to be changed if I change the size of the matrices say from 3x3 to 9x9?

It seems to be working fine, but I thought I should double check with you.

Many thanks

John

Andrei Bobrov

### Andrei Bobrov (view profile)

on 28 Feb 2012

No, do not change

John

### John (view profile)

on 28 Feb 2012

Thanks

#### Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi