# How to convert rows to logical

2 views (last 30 days)
Simon Allosserie on 27 Oct 2022
Commented: Simon Allosserie on 10 Nov 2022
I am filtering a set of values in a column vector in multiple steps. In the end, I get the row numbers of the values that should be kept, eg.:
A = 1:10;
%fitering happens
r = [2 7 8]; %the rows to keep
Now for subsequent calculations, I need A with only the filtered values, and 0's in the other values. At the moment I do it like this:
filter = ~min(logical(abs(A-r(:))),[],1)
filter = 1×10 logical array
0 1 0 0 0 0 1 1 0 0
Afiltered = A.*filter
Afiltered = 1×10
0 2 0 0 0 0 7 8 0 0
However this method isn't that elegant so I was wondering if there are some standard functions / quicker ways to get the same?
Due to the nature of the filters, it is not possible to work with masks that have the same length as A. r will always be shorter than A.

Star Strider on 27 Oct 2022
Why not just:
A = 1:10;
%fitering happens
r = [2 7 8]; %the rows to keep
Afiltered = zeros(size(A));
Afiltered(r) = A(r)
Afiltered = 1×10
0 2 0 0 0 0 7 8 0 0
.
##### 2 CommentsShowHide 1 older comment
Simon Allosserie on 10 Nov 2022
Okay I will look into the differences between the two approaches and see which renders the results the fastest for the data that I use. Thanks for coming back to this!

Cris LaPierre on 27 Oct 2022
I'm not aware of a special function for this, but perhaps a more readable way would be this?
A = 1:10;
r = [2 7 8];
Afiltered=zeros(1,length(A));
Afiltered(r)=r
Afiltered = 1×10
0 2 0 0 0 0 7 8 0 0
Simon Allosserie on 27 Oct 2022
Yes this is indeed much more simple, I was making it way too complicated. Thanks for helping me out of my thinking rut!

### Categories

Find more on Image Filtering in Help Center and File Exchange

R2019b

### Community Treasure Hunt

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

Start Hunting!

Translated by