How can I average values from 3 consecutive rows of a matrix in one designated column repeatedly over the whole matrix?

5 views (last 30 days)
This is what an example of the original matrix A looks like.
A = 6x6
1 3 4 3 4 5
2 4 5 7 7 4
7 9 5 6 4 3
4 9 4 5 3 2
9 3 2 2 1 1
4 5 6 1 1 2
Now i would like to create a column array with two values. The first value woul be the average of A(1,2),A(2,2),A(3,2) and the second value would be when you calculate the average of A(4,2),A(5,2),A(6,2).
This would then form the column array B
B = 2x1
5.33
5.66
Now comes the important part. My matrix has over 200'000 rows and i want to do this repeatedly over all rows of the matrix in one column. Always calculate the mean value of the numbers at the same column position in 3 consecutive rows and then take the mean of the next 3 and so on... And then create a new column array with all the mean values (the length of the new array would be a third of the original matrix). I don't know the absolute length of the matrix since it can vary due to different measurements so it should be some kind of loop that does not take forever to calculate since there are so many rows.
Thank you already for your time.

Accepted Answer

Benjamin Thompson
Benjamin Thompson on 28 Apr 2022
If your matrix can have a number of rows that is a multiple of three, and you should know its size at the time you need to perform these calculations, then you can use reshape and then rely on the behavior of the mean function when operating on matrices like this:
>> A = rand(5,6)
A =
0.8147 0.0975 0.1576 0.1419 0.6557 0.7577
0.9058 0.2785 0.9706 0.4218 0.0357 0.7431
0.1270 0.5469 0.9572 0.9157 0.8491 0.3922
0.9134 0.9575 0.4854 0.7922 0.9340 0.6555
0.6324 0.9649 0.8003 0.9595 0.6787 0.1712
>> A = rand(15,6)
A =
0.7060 0.4898 0.7513 0.3500 0.0759 0.6020
0.0318 0.4456 0.2551 0.1966 0.0540 0.2630
0.2769 0.6463 0.5060 0.2511 0.5308 0.6541
0.0462 0.7094 0.6991 0.6160 0.7792 0.6892
0.0971 0.7547 0.8909 0.4733 0.9340 0.7482
0.8235 0.2760 0.9593 0.3517 0.1299 0.4505
0.6948 0.6797 0.5472 0.8308 0.5688 0.0838
0.3171 0.6551 0.1386 0.5853 0.4694 0.2290
0.9502 0.1626 0.1493 0.5497 0.0119 0.9133
0.0344 0.1190 0.2575 0.9172 0.3371 0.1524
0.4387 0.4984 0.8407 0.2858 0.1622 0.8258
0.3816 0.9597 0.2543 0.7572 0.7943 0.5383
0.7655 0.3404 0.8143 0.7537 0.3112 0.9961
0.7952 0.5853 0.2435 0.3804 0.5285 0.0782
0.1869 0.2238 0.9293 0.5678 0.1656 0.4427
>> Acolumn2 = A(:,2)
Acolumn2 =
0.4898
0.4456
0.6463
0.7094
0.7547
0.2760
0.6797
0.6551
0.1626
0.1190
0.4984
0.9597
0.3404
0.5853
0.2238
Areshape = reshape(Acolumn2,3,5)
Areshape =
0.4898 0.7094 0.6797 0.1190 0.3404
0.4456 0.7547 0.6551 0.4984 0.5853
0.6463 0.2760 0.1626 0.9597 0.2238
>> mean(Areshape)
ans =
0.5272 0.5800 0.4991 0.5257 0.3832
  2 Comments
Benjamin Thompson
Benjamin Thompson on 28 Apr 2022
Noting here that the default behavior of mean for a matrix input is to average each column individually and return a row vector containing those results. Then you can transpose the row vector if needed.

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!