Indexing with different sized vectors

3 visualizaciones (últimos 30 días)
William Sheehan
William Sheehan el 11 de Ag. de 2018
Editada: dpb el 13 de Ag. de 2018
I currently have one vector (49x1) which contains time stamp values - i.e. the first 3 numbers of the vector idx = [1;2013;5045] are associated with specified points in time. I also have another vector (X) which has numerical values for each given point in time - i.e. if I want to the find the value at the specified time point I can just index straight into this. However, I want to find the mean of subsequent points from the initial timestamps specified above and over differing durations. For example I would like to find the mean of the 200 points after the first time stamp and the mean of 350 points after the second timestamp. Essentially I have a third vector - duration = [200;350;255] - specifying the durations for which I want to calculate.
I have currently got the function set up but only returns one value as opposed to one for each idx:
function MeanX = AvgValues(X,Idx,duration)
Duration = Idx + duration;
MeanX = mean(X(Idx:Duration,:),1,'omitnan');
end
  6 comentarios
Stephen23
Stephen23 el 13 de Ag. de 2018
Editada: Stephen23 el 13 de Ag. de 2018
Note that this does not make much sense:
Output = zeros(size(length(Idx)))
length returns a scalar. The size of a scalar is 1x1. So that line is equivalent to
Output = zeros(1,1);
or even simpler:
Output = 0;
How many columns does X have?
dpb
dpb el 13 de Ag. de 2018
Editada: dpb el 13 de Ag. de 2018
Output = zeros(size(length(Idx)))
should be
Output = zeros(size(Idx));
and there's no need for the secondary Count indexing variable; it's the same as k so mayst as well just use it...
function Output = Val(X,Idx,Dur)
Output = zeros(size(Idx));
for k = 1:length(Idx)
duration = Idx(k)+(Dur);
t = Idx(k):duration;
Output(k) = nanmean(X(t,:));
end
end

Iniciar sesión para comentar.

Respuestas (1)

dpb
dpb el 11 de Ag. de 2018
Editada: dpb el 11 de Ag. de 2018
arrayfun(@(ix,n) mean(X(ix:ix+n-1),'omitnan'), Idx,Duration);
Alternatively, instead of generating the start index and count, build a grouping variable and use findgroups, splitapply or discretize...actually, iiuc, you may have the bin edges already for the latter with your indexing vector.

Categorías

Más información sobre Data Preprocessing en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by