How to average columns of matrix without loop?

Hi! I have a rather big (about 1 000 000 X 10 000) matrix. I want to averaging n column blockes. For example:
n = 3;
A = [1 2 3 4 5 6 7 8 9;10 4 1 2 6 4 1 -4 0];
The result shuold be:
res =
2 5 8
5 4 1
I know it could be done with a for loop using mean, but in my code that would be inside of other for loops, which makes a huge runtime. What I basically need is a mooving averege without overleap, but I couldn't find such matlab function. I wonder, if there is a loop free solution for this.

 Akzeptierte Antwort

Vladimir Sovkov
Vladimir Sovkov am 6 Jan. 2021

0 Stimmen

reshape(mean(reshape(A',n,[]))',size(A,2)/n,[])'

Weitere Antworten (1)

KSSV
KSSV am 6 Jan. 2021

1 Stimme

There are functions possible to do the said. Read about movemean, blockproc, reshape.

Kategorien

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

Produkte

Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by