2012-10-01 13 views
6

Chciałbym uzyskać inną kolumnę z każdego wiersza z macierzy. NpUzyskaj różne kolumny w każdym wierszu

A = [1,2;1,4;5,2] 
B = [2;2;1] 

wyjście ma wydajność:

out = [2;4;5] 

tak w skrócie A macierz i B zawiera wskaźniki dla colums wierszu. Jak mogę to zrobić bez użycia pętli (jeśli to możliwe)?

Odpowiedz

7

Można użyć sub2ind przekonwertować (i, j) wskaźniki do wskaźników liniowych w macierzy A

idx = sub2ind(size(A), 1:size(A, 1), B'); 
A(idx) 

ans = 

2  4  5 

który działa przy założeniu, że wektor B ma tyle wpisów, ile jest wierszy w A. W powyższym sub2ind generuje liniowy indeks dla każdej pary kolejnych numerów wierszy (1: rozmiar (A, 1)) i numery kolumn podane w B.

+0

To działa idealnie, dziękuję. Muszę przejrzeć dokumentację sub2ind, aby całkowicie zrozumieć, jak to działa. – Tim

7

Możesz to zrobić przez diag(A(:,B)), istnieje jednak pętla, ale tylko ukryta. Nie wiem jak to zrobić bez pętli.

+1

Podobnie jak w przypadku odpowiedzi za pomocą sub2ind, jest to również doskonałe rozwiązanie. – Tim

+1

Ta metoda działa oczywiście, ale po drodze tworzy macierz N x N (A (:, B)). Jest to dość dużo, kiedy to, czego naprawdę chcesz na końcu, to wektor o rozmiarze N. – angainor

+1

Tak, i dlatego wybrałem twoją odpowiedź jako odpowiedź :-). – Tim

Powiązane problemy