我正在寻找一个单行函数f = @(x) {something}
,如果 x >= 1 则产生 NaN,如果 x < 1 则产生 0 或 1。
有什么建议么?
啊哈,我明白了:
f = @(x) 0./(x<1)
对于 x < 1 产生 0,对于 x>=1 产生 NaN。
这是适用于数组的 Jason 解决方案的修改。请注意,最新版本的 MATLAB 不会引发除零警告。
>> f = @(x) zeros(size(x)) ./ (x < 1)
f =
@(x)zeros(size(x))./(x<1)
>> f(0:.3:2)
ans =
0 0 0 0 NaN NaN NaN
更新:一位同事向我指出,Jason 的原始答案适用于数组。
>> f = @(x) 0./(x<1)
f =
@(x)0./(x<1)
>> f(0:.3:2)
ans =
0 0 0 0 NaN NaN NaN
这是一个不太明显的解决方案(尽管如此矢量化):
f = @(x) subsasgn(zeros(size(x)), struct('type','()','subs',{{x>=1}}), nan) + 0
基本上它相当于:
function v = f(x)
v = zeros(size(x));
v( x>=1 ) = nan;
最后+0
是始终强制输出,即使在f
没有输出参数的情况下调用(在 中返回ans
)。例子:
>> f(-2:2)
ans =
0 0 0 NaN NaN