是否可以在 arrayfun 中使用“if”,如下所示在 Octave 中?
a = [ 1 2; 3 4];
arrayfun(@(x) if x>=2 1 else 0 end, a)
八度抱怨:
>>> arrayfun(@(x) if x>=2 1 else 0 end, a)
^
arrayfun 中是否允许使用 if 子句?
是否可以在 arrayfun 中使用“if”,如下所示在 Octave 中?
a = [ 1 2; 3 4];
arrayfun(@(x) if x>=2 1 else 0 end, a)
八度抱怨:
>>> arrayfun(@(x) if x>=2 1 else 0 end, a)
^
arrayfun 中是否允许使用 if 子句?
在 Octave 中,您不能以正常方式在内联或匿名函数中使用 if/else 语句。您可以在它自己的文件中定义您的函数,也可以将其定义为这样的子函数:
function a = testIf(x)
if x>=2
a = 1;
else
a = 0;
end
end
并像这样调用arrayfun:
arrayfun(@testIf,a)
ans =
0 1
1 1
或者,您可以将此工作与内联函数一起使用:
iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, ...
'first')}();
arrayfun(iif, a >= 2, 1, true, 0)
ans =
0 1
1 1
这里有更多信息。
在 MATLAB 中,您描述的问题不需要 if 语句。其实使用arrayfun真的很简单:
arrayfun(@(x) x>=2, a)
我的猜测是它也适用于 Octave。
请注意,在这种情况下,您实际上根本不需要 arrayfun :
x>=2
应该在这里解决问题。