使用cellfun替换条件元素

时间:2018-05-17 14:15:04

标签: matlab anonymous-function cell-array function-handle elementwise-operations

vec = randi(10,10,1)
vec(vec < 5) = 0

func = @(x) x(x < 5) = 0    % This isn't valid

我应该如何将第二行代码转换为可以与cellfun一起使用的函数句柄?

2 个答案:

答案 0 :(得分:9)

您可以使用乘法,因为如果您的条件满足,则您有10

乘以条件的倒数,可以得到一个未改变的值(如果不满足条件)或者你想要的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

答案 1 :(得分:2)

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

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