logical operation on a column within a matrix

9 vues (au cours des 30 derniers jours)
Christopher
Christopher le 28 Fév 2014
Modifié(e) : lvn le 28 Fév 2014
I have the m-by-n matrix POS
I want to focus on a single column and perform an element-wise logical operation. For instance, turning all zero's to ones:
POS(POS(:,2)==0)=1;
However, this does nothing. On the other hand, this works on the whole matrix:
POS(POS==0)=1;
But, obviously, I just want to perform this operation on column 2. What am I missing? I do not want another line of code since speed is very important here.
Even more confusing, the following works on the first column, but not on the second:
POS(POS(:,1)==1)=2; % works
POS(POS(:,2)==1)=2; % not working

Réponse acceptée

lvn
lvn le 28 Fév 2014
This should work:
POS(POS(:,2)==0,2)=1;
  2 commentaires
Christopher
Christopher le 28 Fév 2014
Thanks. But why does it work? Where can I read more about this type of referencing?
lvn
lvn le 28 Fév 2014
Modifié(e) : lvn le 28 Fév 2014
filter=(POS(:,2)==0)
gives you a vector (of 0's and 1's).
POS(filter)=1
normally assumes 'filter' to be a matrix. This is why filter=(POS==0) gives you the expected answer. What you want is just to change the second column, hence you only want to target the second column:
POS(filter,2)=0
This tells matlab to change only the second column, using the filter as argument. Note sure this is very clearly explained, but read more here http://www.mathworks.com/help/matlab/math/matrix-indexing.html

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Multicore Processor Targets dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by