how to do something like A(:,B(:)) ?

8 views (last 30 days)
SebLambert
SebLambert on 25 Sep 2013
Hello everybody,
I have a matrix A of size n x p, e.g. 10*4
A =
0.2760 0.7513 0.8407 0.3517
0.6797 0.2551 0.2543 0.8308
0.6551 0.5060 0.8143 0.5853
0.1626 0.6991 0.2435 0.5497
0.1190 0.8909 0.9293 0.9172
0.4984 0.9593 0.3500 0.2858
0.9597 0.5472 0.1966 0.7572
0.3404 0.1386 0.2511 0.7537
0.5853 0.1493 0.6160 0.3804
0.2238 0.2575 0.4733 0.5678
and a vector B (1 x n), e.g.
B =
2 2 4 4 1 2 2 3 3 4
and I would like to build a vector C (1 x n) where C(k) = A(k,B(k)) (in my example I would like to get C = [0.7513 0.2551 0.5853 .......] I thought I was pretty comfortable with matlab syntax but I'm lost there ! :) if anyone has any idea ...

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 25 Sep 2013
nm=size(A)
C=A(sub2ind(nm,1:nm(1),B))
  2 Comments
SebLambert
SebLambert on 25 Sep 2013
ok thank you very much ! that is where I was arriving myself :) but then if A is n x p x q and B is n x p, I have to do something like :
[X,Y] = ndgrid(1:size(A,1),1:size(A,2));
A(sub2ind(size(A),X,Y,B))
Am I right ?

Sign in to comment.

More Answers (1)

Youssef  Khmou
Youssef Khmou on 25 Sep 2013
you can create your vectors as the following :
C1=A(:,B(1));
C2=A(:,B(2));
C4=A(:,B(4));
  1 Comment
SebLambert
SebLambert on 25 Sep 2013
thanks for your answer but I guess that is not what I want to do :) I want to have only one vector where the kth element is A(k,B(k))

Sign in to comment.

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!