Vector and Matrix mutiplication

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.

 Accepted Answer

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 Comments

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.
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).

Sign in to comment.

More Answers (0)

Categories

Find more on Programming in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!