Structure of array: deletion of null elements

17 views (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.

Categories

Find more on Programming in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!