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

Я знаю, что это простой вопрос, но его трудно сформулировать в одном предложении, чтобы погуглить ответ. Итак, у меня есть 3d-матрица размером 2x2x3, например,

A(:,:,1) =[1     1;  1    1];
A(:,:,2) =[2     2; 2     2];
A(:,:,3) =[4     4; 4     4];

и матрица B размером 2x2

B = [ 1 2; 2 3];

Что мне нужно, это выбрать из каждого третьего измерения в A только одно число, используя матрицу B:

for i=1:2,
  for j=1:2,
    C(i,j) = A(i,j,B(i,j));
  end
end

Как сделать это в одной строке без цикла?

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Не совсем одна строка, но без цикла:

[I J] = ind2sub (size(B), 1:numel(B));
linInd = sub2ind (size (A), I, J, B(:)');
C = reshape (A(linInd), size(B));
1 голос
/ 04 июля 2011

Вот еще один вариант:

[r,c,~] = size(A);
[J,I] = meshgrid(1:size(B,1), 1:size(B,2));
idx = reshape(I(:) + r*(J(:)-1) + r*c*(B(:)-1), size(B));
C = A(idx)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...