在Octave/Matlab中使用if语句在arrayfun函数中

5
在Octave中,是否可以使用以下方式在arrayfun中使用“if”语句?
a = [ 1 2; 3 4];
arrayfun(@(x) if x>=2 1 else 0 end,  a)

Octave抱怨:

>>> arrayfun(@(x) if x>=2 1 else 0 end, a)
                                     ^

在arrayfun中允许if条件语句吗?
2个回答

6

在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

这里有更多的信息


4
在MATLAB中,您不需要为描述的问题编写if语句。实际上,使用arrayfun非常简单:
arrayfun(@(x) x>=2,  a)

我的猜测是它在Octave中也可以工作。

请注意,您实际上根本不需要使用arrayfun:

x>=2

这应该能解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接