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

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

 Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 25 Sep 2013

0 votes

nm=size(A)
C=A(sub2ind(nm,1:nm(1),B))

2 commentaires

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 ?
Azzi Abdelmalek
Azzi Abdelmalek le 25 Sep 2013
It's true

Connectez-vous pour commenter.

Plus de réponses (1)

Youssef  Khmou
Youssef Khmou le 25 Sep 2013

0 votes

you can create your vectors as the following :
C1=A(:,B(1));
C2=A(:,B(2));
C4=A(:,B(4));

1 commentaire

SebLambert
SebLambert le 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))

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by