Structure of array: deletion of null elements

1 view (last 30 days)
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 Comments
Jan
Jan on 10 Oct 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.
Andrea Giordano
Andrea Giordano on 10 Oct 2022
Sorry, my bad. Yes, exp_value is the structure i mention (1 x 1 structure), 7 fields:
f_avg (276 x 3) double
f_std (276 x 3) double
t_avg (276 x 3) double
t_std (276 x 3) double
aoa (276 x 1) double
vel (276 x 1) double
inflation (276 x 1) double

Sign in to comment.

Accepted Answer

Jan
Jan on 10 Oct 2022
Edited: Jan on 10 Oct 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

More Answers (1)

Chunru
Chunru on 10 Oct 2022
exp_value(exp_value.f_avg(:, 1)==0) = [];
  1 Comment
Andrea Giordano
Andrea Giordano on 10 Oct 2022
Matrix index is out of range for deletion.
Error in data_analysis_multiple_files (line 66)
exp_value(exp_value.f_avg(:, 1)==0) = [];

Sign in to comment.

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!