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

8 ビュー (過去 30 日間)
SebLambert
SebLambert 2013 年 9 月 25 日
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 ...

採用された回答

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 9 月 25 日
nm=size(A)
C=A(sub2ind(nm,1:nm(1),B))
  2 件のコメント
SebLambert
SebLambert 2013 年 9 月 25 日
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 2013 年 9 月 25 日
It's true

サインインしてコメントする。

その他の回答 (1 件)

Youssef  Khmou
Youssef Khmou 2013 年 9 月 25 日
you can create your vectors as the following :
C1=A(:,B(1));
C2=A(:,B(2));
C4=A(:,B(4));
  1 件のコメント
SebLambert
SebLambert 2013 年 9 月 25 日
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))

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by