Create cell with vector from looping trough struct

9 visualizaciones (últimos 30 días)
Tor Aarskog
Tor Aarskog el 16 de Mayo de 2020
Comentada: Tor Aarskog el 22 de Mayo de 2020
Hello. I have a struct, 1x30, each field has a 1*X columns with index values. some fields are also empty. Im trying to greate a vector, which goes from each index value + 100index points. Then save this as a cell containing a vector ranging from indexvalue to indexvalue +100. for all columns within the 30 fields. Looking at the picture below, indexstruct.col_5, i need a vector going from
149111, 149112,149113....149211
385351, 385352, 385353,.....385451
and so on for all 168 columns in indexstruct.col_5 but also for all columns in col_1 to col_30.
The vectors are then to be used to findi maxvalue within each index-range, ranging from start to 100 indexpoints later. indexvalues correspond to time in an acceleration time history.
Gratefull for any help i can get!
For what its worth im posting my code below. Although I belive its pretty far from achiving what i want.
vec2={}
fn = fieldnames(indexstruct);
for k=1:numel(fn) %looping through struct
for i = length(indexstruct.(fn{k}))
vec2 = (indexstruct.(fn{k})(:,i)):indexstruct.(fn{k})(:,i)+100;
vec2= {vec2;vec2(k)};
end
end
  2 comentarios
Stephen23
Stephen23 el 16 de Mayo de 2020
Using numbered fields makes accessing your data more complex than it needs to be. Much simpler:
  • a non-scalar structure
  • a cell array.
Both of these would make accessing your data easier.
Tor Aarskog
Tor Aarskog el 22 de Mayo de 2020
Hi, Thanks for you advice, do you have any further specific advice on how i could alter the code ?
x=Veracity6raw.y(:,:); % 3686400x30 matrix
indexstruct=struct;
indexvec=[];
j=1;
index=1;
runloop=true;
i=0;
while runloop
i=i+1;
if index+100>length(x)
index=1;
ind_col=['col_' num2str(j)];%make new struct field name
indexstruct.(ind_col)=indexvec;% Make new field in struct for indexvec with column number
indexvec=[]; %make indexvec empty for new column
j=j+1;
if j>size(x,2)%If j is larger than numbers of columns, break loop
break
end
end
vec1=x(index:index+100,j);
if std(vec1)>std_tol(j)
indexvec=[indexvec,index];
index=index+100;
else
index=index+10;
end
end

Iniciar sesión para comentar.

Respuestas (0)

Categorías

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

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by