Paramar
Paramar

Reputation: 307

Using vector as indices not working as expected, matlab

Given a nXm matrix A and a mX2 matrix B and a matrix C of size mX1 containing 1s and 2s C=[1 2 1 2 1...], depending on which column, I want every row of A to be multiplied with. How can this be done? Or equivalently, given D = A*B how can I access only the values dictated by C. I tried D(:,C), but the result is not the expected. Example a =[1 2; 3 4; 5 6] . c = [1 2 1] . a(?) = [1 4 5]
Any idea?

Upvotes: 0

Views: 43

Answers (2)

OmG
OmG

Reputation: 18838

You can run the following command for the last example:

a(sub2ind([3,2],1:3,c))'

In general case you can do like the following:

% n is the length of the D which is nx2 matrix
D(sub2ind([n,2],1:n,C))'

Upvotes: 1

Gelliant
Gelliant

Reputation: 1845

%example data
n=10;m=20;
A=rand(n,m)
B=rand(m,2)
C=round(rand(m,1))+1;

%solution:
B2=B(:,1); %multiplication vector
B2(C==2)=B(C==2,2) %change the ones where C==2
A*B2

Upvotes: 1

Related Questions