Selecting elements of logically pruned vector (concatenating indices)

1 vue (au cours des 30 derniers jours)
Ced
Ced le 12 Jan 2015
Modifié(e) : Ced le 12 Jan 2015
Hi
Given a vector b and a logical vector v_log, is there a straightforward way to extract particular indices of the partial vector b(v_log) without saving it?
In code:
b = randn(20,1); % a vector
v_log = (randn(20,1)>0); % logical vector to select parts of b
ind = [ 2 ; 3 ]; % the elements I'm interested in
c = b(v_log)(ind); % This does not work, but is there a way to do this?
Thanks!

Réponse acceptée

Kelly Kearney
Kelly Kearney le 12 Jan 2015
I think you'd need to save the indices.
idx = find(v_log);
c = b(idx(ind));
Depending on the size/sparsity of v_log, you may be able to save some time and storage space by only saving the necessary number of indices:
idx = find(vlog, max(ind), 'first');
c = b(idx(ind));

Plus de réponses (1)

Ced
Ced le 12 Jan 2015
Modifié(e) : Ced le 12 Jan 2015
@Star Strider: Sure thing, thanks. Just for clarity: b is an arbitrary vector. v_log is a logical vector, hence b(v_log) returns a part of b. My question was how to extract certain elements with indices ind of that partial vector b(v_log) without having to save them.
@Kelly Kearney: Thanks, I'll accept that answer and give that a try. The size of v_log in my case is pretty (very) large and is computed in an iterative loop, which is why I was hoping to do this without saving.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by