利用find结果在Matlab中索引到多维矩阵

时间:2014-05-03 10:07:29

标签: matlab matrix-indexing

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

A的第2列包含B的第1维的索引。

A的第3列包含2个可能的值:0或1。

根据以下条件,我想提取B中的值。

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

B的第1维的索引是:

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

如何获得二维矩阵,以便:

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

1 个答案:

答案 0 :(得分:0)

看看这是否适合你 -

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])')