代码之家  ›  专栏  ›  技术社区  ›  Karnivaurus

Matlab:使用矩阵作为掩码执行元素运算

  •  2
  • Karnivaurus  · 技术社区  · 11 年前

    在Matlab中,我有两个矩阵:一个是整数, x 和一个布尔值, y :

    x =
    
         2     4     2
         3     3     1
         4     1     5
    
    y =
    
         0     0     1
         1     1     0
         1     0     1
    

    我现在要做的是分配 x(x) 到5,我想使用 y 作为掩码,以确定哪些元素应设置为5 y 应该保持原样 x(x) ,但对应值为1的 y 应设置为5。因此,输出应为:

         2     4     5
         5     5     1
         5     1     5
    

    我尝试了以下方法:

    x(y) = 5
    

    这给了我一个错误:

    Subscript indices must either be real positive integers or logicals.
    

    我也尝试过:

    y(x) = 5
    

    这给了我以下信息:

     5     5     1
     5     1     0
     5     0     1
    

    有人能解释一下这里发生了什么,以及我需要做什么才能得到我想要的结果吗?

    3 回复  |  直到 11 年前
        1
  •  3
  •   il_raffa    11 年前

    你犯的错误显然是因为, y 属于 type double 而在这种情况下,它应该是 type logical

    您可以尝试:

    x(logical(y))=5
    

    希望这有帮助

        2
  •  0
  •   Leonardo Hermoso    11 年前

    这不是一个花哨的解决方案,但会解决你的问题

    >> x = [  2     4     2;3     3     1;4     1     5];
    y = logical([  0     0     1;1     1     0;1     0     1]);
    f = x(:);
    f(y(:)) = 5;
    x = reshape(f,size(x))
    
    x =
    
         2     4     5
         5     5     1
         5     1     5
    
    >> 
    
        3
  •  -1
  •   Hesham Eraqi    11 年前

    x(find(y)) = 5; 应该工作正常。