Structure of array: deletion of null elements
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Andrea Giordano
el 10 de Oct. de 2022
In a for loop, I am reading data from a .csv file, and copying them into a structure made of several arrays, fixed number of elements (276). Depending on the structure array called f_avg, I would like to keep or delete the whole structure element. For instance, if f_avg(k, 1)== 0, I would like to delete the k_th element of each array belonging to that structure. To do so, I tried the following (see below), getting the error "The logical indices contain a true value outside of the array
bounds.
Error in data_analysis_multiple_files (line 65)
exp_value = exp_value(exp_value.f_avg(:, 1)~=0)". Thank you in advance for your help.
exp_value = exp_value(exp_value.f_avg(:, 1)~=0);
2 comentarios
Jan
el 10 de Oct. de 2022
What do you call "the whole structure element"?
exp_value is the struct, correct? Which dimensions does it have? Which size has exp_value.f_avg? The error message means, that exp_value.f_avg(:, 1) has more elements than exp_value.
Respuesta aceptada
Jan
el 10 de Oct. de 2022
Editada: Jan
el 10 de Oct. de 2022
S = exp_value; % Just for readability
remove = (S.f_avg(:, 1) == 0);
fields = setdiff(fieldnames(S), {'f_avg'}); % All fields but f_avg
for k = 1:numel(fields)
S.(fields{k})(remove, :) = [];
end
Slightly shorter, but with strange loop over a cell string:
S = exp_value; % Just for readability
remove = (S.f_avg(:, 1) == 0);
fields = setdiff(fieldnames(S), {'f_avg'}); % All fields but f_avg
for F = fields
S.(F)(remove, :) = [];
end
0 comentarios
Más respuestas (1)
Ver también
Categorías
Más información sobre String 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!