Averaging Together Every N Columns
Afficher commentaires plus anciens
Hi!
I have a 16:10000 matrix (positive and negative decimal values) and want to reshape it to a 16:10 matrix by averaging each row every 1000 columns. What's the best way to do this?
Thanks very much! SE
Réponse acceptée
Plus de réponses (3)
r = rand(16, 10000);
s = reshape(r, 16, 1000, 10);
t = squeeze(mean(s, 2));
Some timings:
r = rand(16, 10000);
tic;
for k = 1:20
AVG_COLS = 1000;
DIM = 2; % Columns
r_moving_avg = filter(ones(1,AVG_COLS)/AVG_COLS,1,r,[],DIM);
r_avg = r_moving_avg(:,AVG_COLS:AVG_COLS:end);
end
toc
tic;
for k = 1:20
N = 1000 ;
szA = size(r) ;
B = arrayfun(@(k) mean(r(:,k:min(szA(2),k+N-1)),2), 1:N:szA(2), 'un', 0) ;
B = [B{:}] ;
end
toc
tic;
for k = 1:20
s = reshape(r, 16, 1000, 10);
t = squeeze(mean(s, 2)); end
toc
Elapsed time is 1.671149 seconds.
Elapsed time is 0.035495 seconds.
Elapsed time is 0.016600 seconds.
Sarah
le 10 Avr 2014
0 votes
Jos (10584)
le 10 Avr 2014
Another option:
A = rand(16,10000) ;
N = 1000 ;
szA = size(A) ;
B = arrayfun(@(k) mean(A(:,k:min(szA(2),k+N-1)),2), 1:N:szA(2), 'un', 0) ;
B = [B{:}] ;
Catégories
En savoir plus sur Resizing and Reshaping Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!