【问题标题】:MATLAB: indexing a 3d matrix with another 3d matrixMATLAB:用另一个 3d 矩阵索引一个 3d 矩阵
【发布时间】:2015-06-16 06:23:35
【问题描述】:

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

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

我该怎么做?有什么简单的方法吗?

【问题讨论】:

    标签: matlab matrix indexing 3d octave


    【解决方案1】:

    这可能是在B 的第三维最后一页具有1 的位置处设置A 的第三维最后一页中的元素的一种方法-

    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
    

    【讨论】:

    • 真棒+1 ..顺便说一句,numel(B) - numel(B(:,:,1)),您实际上是在索引中添加numel(B(:,:,1:end-1)),仪式?如果我错了,请纠正我
    • @SanthanSalai 谢谢!这正是我正在做的。我想有很多方法可以达到这个数字。
    • 我尝试了 {[r c]=find(B(:,:,end)==1)} 然后 {A(r,c,end)=2} 并且它起作用了。感谢您指出“查找”功能,确实非常简单!
    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2015-02-04
    • 1970-01-01
    • 2013-01-20
    • 2013-09-21
    相关资源
    最近更新 更多