How to convert rows to logical

4 vues (au cours des 30 derniers jours)
Simon Allosserie
Simon Allosserie le 27 Oct 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.

Réponse acceptée

Star Strider
Star Strider le 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 commentaires
Simon Allosserie
Simon Allosserie le 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!

Connectez-vous pour commenter.

Plus de réponses (1)

Cris LaPierre
Cris LaPierre le 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
  1 commentaire
Simon Allosserie
Simon Allosserie le 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!

Connectez-vous pour commenter.

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by