Доступ к матрице данных с использованием индексов, хранящихся в другой матрице - PullRequest
0 голосов
/ 04 февраля 2019

В matlab у меня обычно есть матрица данных размером NxMxLxK, которую я хочу индексировать по определенному измерению (например, четвертое), используя матрицу индексов размера NxMxL со значениями 1..K (предположим, что все находятся в этом диапазоне):

>>> size(Data)
ans =
     7    22    128    40
>>> size(Ind)
ans =
     7    22    128

Я хотел бы иметь код без циклов, который обеспечивает следующий эффект:

Result(i,j,k) = Data(i,j,k,Ind(i,j,k))

для всех значений i, j, k в диапазоне.

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете векторизовать свои матрицы и использовать sub2ind:

% create indices that running on all of the options for the first three dimensions:
A = kron([1:7],ones(1,22*128));
B = repmat(kron([1:22],ones(1,128)),1,7);
C = repmat([1:128],1,7*22);

Result_vec = Data(sub2ind(size(Data),A,B,C,Ind(:)'));
Result = reshape(Result_vec,7,22,128);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...