Indexing with different sized vectors
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
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
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
Respuestas (1)
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.
0 comentarios
Ver también
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!