# How to combine indexing?

37 views (last 30 days)
Markus Gschwind on 10 Oct 2020
Edited: Sindar on 13 Oct 2020
Is there an elegant way of combining two indexings to select time points from a long time-series?
I have independent selection criteria :
1. marked events (index vector ind_Ev)
2. marked artifacted periods (ind_Art)
I would like to combine both to select the elements of a time series with 500000 elemtents, i.e. take the ind_Ev and exclude the ind_Art (ind_Ev & ~ind_Art), however, they can point to the same element, in which case it will be excluded.
Thank you so much,
Markus

Sindar on 10 Oct 2020
Edited: Sindar on 10 Oct 2020
There may be a better way, but this should work:
% set up a logical-indexing vector that selects no elements
idx_Ev_not_Art = false(500000,1);
idx_Ev_not_Art(ind_Ev) = true;
% remove all ind_Art elements
idx_Ev_not_Art(ind_Art) = false;
% extract those elements
data_Ev_not_Art = data(idx_Ev_not_Art);
Sindar on 13 Oct 2020
Oh, I'd assumed you had indices, not logicals. There are faster ways in that case, since you can do the boolean logic directly:
idx_Ev = logical(ind_eV);
idx_period = logical(ind_period);
idx_Art = logical(ind_Art);
% data from either events, periods, or both. No artifacts
data_EvORPer_not_Art = data( (idx_Ev | idx_period) & ~idx_Art );
% data from overlap of both events and periods. No artifacts
data_EvANDPer_not_Art = data( idx_Ev & idx_period & ~idx_Art );
% data from events excluding artifacts, plus periods regardless
data_EvANDPer_not_Art = data( (idx_Ev & ~idx_Art) | idx_period );