是否可以像在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子句?

最佳答案

在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

有更多信息here

关于matlab - 在Octave/Matlab中的arrayfun中使用if子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16555724/

10-12 19:14