MATLAB:使用另一个3d矩阵索引3d矩阵

时间:2015-04-10 13:42:21

标签: matlab matrix indexing 3d octave

假设我有两个相同尺寸的3D矩阵(3x3x2):

A =
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
0 0 0
0 0 0
0 0 0
B =
ans(:,:,1) =
0 1 0
0 1 0
0 1 0
ans(:,:,2) =
1 0 0
1 0 0
0 0 1

我想索引A的最后一页(第三维),其中B的相应页面等于1并将这些值转换为2,以便A变为:

A =
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
2 0 0
2 0 0
0 0 2

我该怎么办?有一个简单的方法吗?

1 个答案:

答案 0 :(得分:3)

这可以是在A的第三维中B的第三个维度中的最后一页具有1&#39的第三维中设置最后一页中的元素的方法之一; s -

A(find(B(:,:,end)==1) + numel(B) - numel(B(:,:,1))) = 2

示例运行 -

%// Starting input, A
A(:,:,1) =
    0.2187    0.1097    0.4046    0.3658
    0.1058    0.0636    0.4484    0.7635
A(:,:,2) =
    0.6279    0.9329    0.1920    0.6963
    0.7720    0.9727    0.1389    0.0938
A(:,:,3) =
    0.5254    0.8611    0.3935    0.7413
    0.5303    0.4849    0.6714    0.5201

%// Input, B    
B(:,:,1) =
     2     2     1     1
     1     1     3     2
B(:,:,2) =
     3     3     3     2
     2     2     3     1
B(:,:,3) =
     1     1     3     3
     2     1     2     2

%// Output, A
A(:,:,1) =
    0.2187    0.1097    0.4046    0.3658
    0.1058    0.0636    0.4484    0.7635
A(:,:,2) =
    0.6279    0.9329    0.1920    0.6963
    0.7720    0.9727    0.1389    0.0938
A(:,:,3) =
    2.0000    2.0000    0.3935    0.7413
    0.5303    2.0000    0.6714    0.5201