Вопрос по matlab, row, matrix – Получить разные столбцы в каждом ряду

7

Я хотел бы получить разные столбцы из каждой строки из матрицы. Например:

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

выход должен дать:

out = [2;4;5]

Итак, вкратце:A это матрица иB имеет индексы для столбцов в ряду. Как я могу сделать это без использования цикла (если этовозможно)?

Ваш Ответ

2   ответа
8

Ты можешь использоватьsub2ind преобразовать (i, j) индексы в линейные индексы в матрице A

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

ans =

 2     4     5

Это работает при условии, что вектор B имеет столько же записей, сколько строк в A. В приведенном выше sub2ind генерирует линейный индекс для каждой пары последующих номеров строк (1: размер (A, 1)) и номеров столбцов, указанных в B.

Это работает отлично, спасибо. Я должен посмотреть документацию sub2ind, чтобы полностью понять, как это работает. Tim
8

diag(A(:,B)) Тем не менее, существует цикл, но только неявный. Я нене знаю, как сделать это без всякой петли.

Этот метод работает, конечно, но на пути он создает матрицу N x N (A (:, B)). Это довольно сложная задача, когда в конце концов вы хотите получить вектор размера N. angainor
Как и ответ с использованием sub2ind, это также отлично справляется с задачей. Tim
Да, и этоВот почему я выбрал ваш ответ, чтобы быть реальным ответом :-). Tim

Похожие вопросы