Selecting elements of logically pruned vector (concatenating indices)

1 view (last 30 days)
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!

Accepted Answer

Kelly Kearney
Kelly Kearney on 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));

More Answers (1)

Ced
Ced on 12 Jan 2015
Edited: Ced on 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.

Categories

Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!