Использование результатов поиска для индексации многомерной матрицы в Matlab

A = 100 x 3 matrix
B = 200 x 10 x 100 matrix

столбец 2 A содержит индекс измерения 1 B.

столбец 3 A содержит 2 возможных значения: 0 или 1.

Основываясь на следующих условиях, я хочу извлечь значения в B.

x = find(A(:, 3) == 0);
y = find(A(:, 3) == 1);

Индекс к размерности 1 B:

x_idx = A(x, 2);
y_idx = A(y, 2);

Как я могу получить двумерную матрицу, такую, что:

C = B(x_idx, :, x);
D = B(y_idx, :, y);

person kjloh    schedule 03.05.2014    source источник


Ответы (1)


Посмотрите, работает ли это для вас -

ind1 = sub2ind(size(B), x_idx, ones(numel(x),1), x)
C = B(bsxfun(@plus,ind1,size(B,1)*[0:size(B,2)-1])') %%//'

ind2 = sub2ind(size(B), y_idx, ones(numel(y),1), y)
D = B(bsxfun(@plus,ind2,size(B,1)*[0:size(B,2)-1])')
person Divakar    schedule 03.05.2014