Hi there;
I have a vector A(kx1) and a matrix B (nxk). I need select rows from that correspond to ONES in A, and sum those rows mod2:
Example:
A =[1 0 1 0 1] and
B = [1 0 1 0 1;
1 0 0 1 0;
0 1 1 1 1;
1 1 0 1 1;
0 1 1 0 1];
In this example, I want to add rows that indicates ones in A, i.e. rows of B(1, 3,5) & sum those 3 rows mod2.
Kindly help.

 Réponse acceptée

Star Strider
Star Strider le 27 Nov 2016

0 votes

I’m not certain that I understand what you want to do.
See if this works:
A = [1 0 1 0 1];
B = [1 0 1 0 1; 1 0 0 1 0; 0 1 1 1 1; 1 1 0 1 1; 0 1 1 0 1];
C = B(logical(A'),:);
Out = mod(sum(C,2),2)

4 commentaires

Star Strider
Star Strider le 27 Nov 2016
Moe Joe’s ‘Answer’ moved here
A = [1 0 1 0 1];
B = [1 0 1 0 1; 1 0 0 1 0; 0 1 1 1 1; 1 1 0 1 1; 0 1 1 0 1];
C = B(logical(A'),:);
Then I complete it as:
D=sum(C(:,1:n));
Result =[1 2 3 1 3];
Then E=mod(D,2);
E=[1 0 1 1 1];
Kindly check it, and if there is a better way to do it, then show me.
The better way is my code!
At least it is if I read your Question correctly (and I believe I did).
This is specifically because in your Question you wrote ‘i.e. rows of B(1, 3, 5)’.
Your code creates 5 column sums, not the 3 row sums you described.
My code produces:
Out =
1
0
1
Note that these are the 3 row sums mod(,2) that you said you wanted.
This seems to me to be the result desired.
Moe Joe
Moe Joe le 27 Nov 2016
OK, let me rephrase my question in terms of a picture:
That clarifies things. You are actually summing the columns of ‘D’, so that would be ‘sum(D,1)’ (or more simply, ‘sum(D)’) rather than ‘sum(D,2)’ that would sum the rows.
So the desired result would be:
Out = mod(sum(D),2)
or in my code:
Out = mod(sum(C),2)
producing the result described by (5).

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Programming dans Centre d'aide 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