在Octave/Matlab中的arrayfun中使用if子句

Alf*_*ong 5 matlab matrix scientific-computing octave

是否可以像在Octave中的以下一样在arrayfun中使用"if"?

a = [ 1 2; 3 4];
arrayfun(@(x) if x>=2 1 else 0 end,  a)
Run Code Online (Sandbox Code Playgroud)

而Octave抱怨:

>>> arrayfun(@(x) if x>=2 1 else 0 end, a)
                                     ^
Run Code Online (Sandbox Code Playgroud)

在arrayfun中是否允许if子句?

Mol*_*lly 6

在Octave中,您不能以正常方式在内联或匿名函数中使用if/else语句.您可以在其自己的文件中定义您的函数,或者像这样的子函数:

function a = testIf(x)
     if x>=2
        a = 1;
     else 
        a = 0;
     end
 end
Run Code Online (Sandbox Code Playgroud)

并像这样调用arrayfun:

arrayfun(@testIf,a)
ans =

   0   1
   1   1
Run Code Online (Sandbox Code Playgroud)

或者你可以使用内联函数来解决这个问题:

iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, ...
                                     'first')}();

arrayfun(iif, a >= 2, 1, true, 0)
ans =

   0   1
   1   1
Run Code Online (Sandbox Code Playgroud)

还有更多的信息在这里.