Как проиндексировать разреженный набор элементов в матрице? - PullRequest
0 голосов
/ 17 февраля 2012

У меня большая матрица, и я хочу получить набор значений в разных местах, используя один оператор вызова.

Так, например, я хочу получить (2,3), (6,7) и (15,19)

Я знаю, что могу сделать следующее;

myRows = [2 6 15];
myCols = [3 7 19];
myTempResults = myBigMatrix(myRows, myCols);    % Which will return all possible pairs
% Then I can do
%
myFinalResults = diag(myTempResults);

Но я бы хотел знать правильный / правильный способ сделать это.

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2012

Вы должны использовать sub2ind или рассчитать линейные индексы самостоятельно:

a = rand(20,30); % 20 x 30 matrix
myRows = [2 6 15];
myCols = [3 7 19];

% method 1, sub2ind
a(sub2ind(size(a),myRows,myCols))

% or calculate it yourself, Matlab is column major
% and 1-based so row/col (i,j) is (j-1)*nrow+i
a( (myCols-1)*size(a,1) + myRows )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...