How do I take the average of every n values in a vector?

422 vues (au cours des 30 derniers jours)
Brooks
Brooks le 27 Juin 2013
I have some data on Pulse Rate and the sample was taken at 1000 Hz (One sample every millisecond), way too big for what I want to see. My vector is 399277x1 and I want to be able to average every 1000 values and get that number in a new vector of somewhere around 400x1. Is there any way to do this?
Thanks

Réponse acceptée

Matthew Eicholtz
Matthew Eicholtz le 27 Juin 2013
Try this...
n = 1000; % average every n values
a = reshape(cumsum(ones(n,10),2),[],1); % arbitrary data
b = arrayfun(@(i) mean(a(i:i+n-1)),1:n:length(a)-n+1)'; % the averaged vector
  9 commentaires
Adoniram
Adoniram le 5 Jan 2019
COOL! thank you
Richard Joisce
Richard Joisce le 28 Fév 2022
@Image Analyst oh bore off ffs

Connectez-vous pour commenter.

Plus de réponses (4)

Jan
Jan le 28 Juin 2013
Modifié(e) : Jan le 17 Mai 2019
x = rand(399277, 1); % Some example data
n = 1000; % Number of elements to create the mean over
s1 = size(x, 1); % Find the next smaller multiple of n
m = s1 - mod(s1, n);
y = reshape(x(1:m), n, []); % Reshape x to a [n, m/n] matrix
Avg = transpose(sum(y, 1) / n); % Calculate the mean over the 1st dim
  10 commentaires
Jan
Jan le 23 Juin 2022
@Laukik Avinash Kharche: I assume, this helps:
Avg = repelem(Avg, 10, 1);
Laukik Avinash Kharche
Laukik Avinash Kharche le 1 Juil 2022
Thanks a lot, it worked.
:)

Connectez-vous pour commenter.


Image Analyst
Image Analyst le 27 Juin 2013
Modifié(e) : Image Analyst le 5 Jan 2019
Here is how I'd do it (an alternate way), using blockproc to average in 100 element long blocks in "jumps":
% Create sample data
PulseRateF = rand(399277, 1);
% Define the block parameter. Average in a 100 row by 1 column wide window.
blockSize = [1000, 1];
% Block process the image to replace every element in the
% 100 element wide block by the mean of the pixels in the block.
% First, define the averaging function for use by blockproc().
meanFilterFunction = @(theBlockStructure) mean2(theBlockStructure.data(:));
% Now do the actual averaging (block average down to smaller size array).
blockAveragedDownSignal = blockproc(PulseRateF, blockSize, meanFilterFunction);
% Let's check the output size.
[rows, columns] = size(blockAveragedDownSignal)
  5 commentaires
Stelios Fanourakis
Stelios Fanourakis le 16 Mai 2019
Modifié(e) : Stelios Fanourakis le 16 Mai 2019
I am not sure whether I understood it well. I use this
% Create sample data
PulseRateF = Pd;
% Define the block parameter. Average in a 100 row by 1 column wide window.
blockSize = [300, 100];
% Block process the image to replace every element in the
% 100 element wide block by the mean of the pixels in the block.
% First, define the averaging function for use by blockproc().
meanFilterFunction = @(theBlockStructure) mean2(theBlockStructure.data(:));
% Now do the actual averaging (block average down to smaller size array).
blockAveragedDownSignal = blockproc(PulseRateF, blockSize, meanFilterFunction);
% Let's check the output size.
[rows, columns] = size(blockAveragedDownSignal)
And I get
rows = 5 columns = 1
What those numbers mean?
Jan
Jan le 16 Mai 2019
Look at the code: These numbers are the size of the variable blockAveragedDownSignal.

Connectez-vous pour commenter.


Andrei Bobrov
Andrei Bobrov le 28 Juin 2013
Modifié(e) : Andrei Bobrov le 28 Juil 2017
x = randi(1000,399277,1);
n = 1000;
m = numel(x);
out = nanmean(reshape( [x(:);nan(mod(-m,n),1)],n,[]));
or
out = accumarray(ceil((1:numel(x))/1000)',x(:),[],@mean);
  3 commentaires
Stelios Fanourakis
Stelios Fanourakis le 13 Mai 2019
@Andrei Bobrov
What this actually does? Does it average in a step of n intervals along the x axis? This is what I am looking for. Hope this does what I want.
I want to divide the x axis into intervals and average between them.
Imran Yasin
Imran Yasin le 31 Juil 2020
Very nice job!

Connectez-vous pour commenter.


Aubai
Aubai le 20 Jan 2017

Catégories

En savoir plus sur Historical Contests dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by