Как извлечь не вертикальный столбец из матрицы в Matlab - PullRequest
1 голос
/ 11 октября 2011

У меня есть матрица A и вектор b, который указывает индекс столбца элемента, который нужно извлечь для каждой соответствующей строки матрицы.

Например,

A = [1 2 3
     4 5 6
     7 8 9]

b = [1 3 2]'

I 'Я хотел бы иметь c = [1 6 8]' на выходе.Как этого добиться?

Я пытался A(:, b), но он не работает так, как мне нужно.

Ответы [ 2 ]

2 голосов
/ 11 октября 2011

В качестве альтернативы решению @ dantswain, вы можете перейти непосредственно к линейным индексам, предполагая, что вы всегда выбираете из столбцов:

r = size(A,1);
A( (1:r).' + (b-1) * r)

Это будет быстрее, но не обязательно более четким.

К сожалению, элегантного решения не существует.

2 голосов
/ 11 октября 2011

Может быть более элегантное решение, но это работает:

b = [1 3 2]';
[rows, cols] = size(A);
A(sub2ind([rows cols], [1 : rows]', b))
...