Use element as indices to continue calculation

Hello, I split a set of data (3600 rows) to four segments and want to do separate calculation for each of them.
I have identified the start indices (t values) of each segment and combined them to a vector:
ind=[1,764,1335,1459,2151]
I want to calculate the mean values of x, y and z in each segment.
t=data(:,1);
P=data(:,2:4);
x=P(:,1); y=P(:,2);z=P(:,3);
I really appreciate your suggestions. Thank everyone in advance!

 Respuesta aceptada

CHIRANJIT DAS
CHIRANJIT DAS el 29 de Oct. de 2022
Editada: CHIRANJIT DAS el 1 de Nov. de 2022
Not sure what you are looking for. Hope the below code serves your requirement.
Data=csvread('data.csv'); ind=[1,764,1335,1459,2151];
t=Data(:,1);
P=Data(:,2:4); x=P(:,1); y=P(:,2);z=P(:,3);
xsec=[]; ysec=[]; zsec=[];
for i=1:length(ind)-1
disp(i)
xs1=nanmean(x(ind(i):ind(i+1))); xsec=[xsec;xs1];
ys1=nanmean(y(ind(i):ind(i+1))); ysec=[ysec;ys1];
zs1=nanmean(z(ind(i):ind(i+1))); zsec=[zsec;zs1];
end
final=[xsec,ysec,zsec]; % 1st,2nd,3rd columns are means of individual ind sections of x,y,z
Cheers.

5 comentarios

Anni Shi
Anni Shi el 29 de Oct. de 2022
Hi Chiranjit,
Thank you for your effort!
But actually, I am trying to find the mean of x,y,z values for each section.
Using first segment as an example, I want find Xmean=mean(x(1):x(764));Ymean=mean(y(1):y(764));Zmean=mean(z(1):z(764))
I want to find a code to output mean values of each segment automatically.
CHIRANJIT DAS
CHIRANJIT DAS el 29 de Oct. de 2022
Editada: CHIRANJIT DAS el 29 de Oct. de 2022
@Anni Shi Check the edited answer
Anni Shi
Anni Shi el 31 de Oct. de 2022
Thank you @CHIRANJIT DAS! It works!
Elements in the ind-vector are counted twice in your code.
Should be
xmean(i) = mean(x(ind(i):(ind(i+1)-1)));
ymean(i) = mean(y(ind(i):(ind(i+1)-1)));
zmean(i) = mean(z(ind(i):(ind(i+1)-1)));
instead of
xs1=nanmean(x(ind(i):ind(i+1))); xsec=[xsec;xs1];
ys1=nanmean(y(ind(i):ind(i+1))); ysec=[ysec;ys1];
zs1=nanmean(z(ind(i):ind(i+1))); zsec=[zsec;zs1];
Anni Shi
Anni Shi el 1 de Nov. de 2022
@Torsten Thank you for checking. I tested his version and it works fine. I didn't really notice it get counted twice in the result.

Iniciar sesión para comentar.

Más respuestas (1)

data = readmatrix("https://de.mathworks.com/matlabcentral/answers/uploaded_files/1172778/data.csv");
ind=[1,764,1335,1459,2151];
t=data(:,1);
P=data(:,2:4);
x=P(:,1); y=P(:,2);z=P(:,3);
ind = [ind,numel(t)+1];
for i = 1:numel(ind)-1
xmean(i) = mean(x(ind(i):(ind(i+1)-1)));
ymean(i) = mean(y(ind(i):(ind(i+1)-1)));
zmean(i) = mean(z(ind(i):(ind(i+1)-1)));
end
xmean
xmean = 1×5
1.0e+03 * 2.1501 2.2066 2.2559 2.2694 2.1244
ymean
ymean = 1×5
1.0e+03 * 3.6214 3.5568 3.4870 3.4679 3.6411
zmean
zmean = 1×5
-111.2237 -207.9818 -269.9069 -301.0967 -33.5058

3 comentarios

Anni Shi
Anni Shi el 31 de Oct. de 2022
Thank you, Torsten! The code works but I am wodering the meaning of ind=[ind, numel(t)+1]. Thank you in advance.
Torsten
Torsten el 1 de Nov. de 2022
I thought you might also be interested in the mean for the elements from 2152 to the end ...
Anni Shi
Anni Shi el 1 de Nov. de 2022
Got it! Thank you so much!

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

el 28 de Oct. de 2022

Comentada:

el 1 de Nov. de 2022

Community Treasure Hunt

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

Start Hunting!

Translated by