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

使用cellfun的条件元素替换

  •  6
  • Andi  · 技术社区  · 7 年前
    vec = randi(10,10,1)
    vec(vec < 5) = 0
    
    func = @(x) x(x < 5) = 0    % This isn't valid
    

    我应该如何将第二行代码翻译成一个可以与之结合使用的函数句柄 cellfun ?

    2 回复  |  直到 7 年前
        1
  •  9
  •   Wolfie Radu Stefan    7 年前

    你可以使用乘法,因为如果你的条件满足,你就 1 0 否则

    因此,乘以条件的倒数可以得到一个不变的值(如果条件不满足),或者可以得到所需的 0 !

    func = @(x) x .* (~(x < 5)) % Replace values less than 5 with 0
    

    如果有不同的替换,可以扩展相同的逻辑

    func = @(x) x .* (~(x < 5)) + 10 * (x < 5) % replace values less than 5 with 10
    
        2
  •  2
  •   JHBonarius    7 年前

    不使用匿名函数,而是使用函数句柄如何?

    vec = randi(10,10,1);
    vec_cell = num2cell(vec);
    vec_cell_out = cellfun(@func, vec_cell);
    
    function x = func(x)
        x(x<5) = 0;
    end