使用 cellfun 进行条件元素替换
Conditional element replacement using cellfun
vec = randi(10,10,1)
vec(vec < 5) = 0
func = @(x) x(x < 5) = 0 % This isn't valid
我应该如何将第二行代码转换为可以与 cellfun
一起使用的函数句柄?
不使用匿名函数,而是使用函数句柄怎么样?
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
您可以使用乘法,因为如果满足您的条件,则您有 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
vec = randi(10,10,1)
vec(vec < 5) = 0
func = @(x) x(x < 5) = 0 % This isn't valid
我应该如何将第二行代码转换为可以与 cellfun
一起使用的函数句柄?
不使用匿名函数,而是使用函数句柄怎么样?
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
您可以使用乘法,因为如果满足您的条件,则您有 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