5

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

4

2 回答 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

这里有更多信息。

于 2013-05-15T03:44:13.943 回答
4

在 MATLAB 中,您描述的问题不需要 if 语句。其实使用arrayfun真的很简单:

arrayfun(@(x) x>=2,  a)

我的猜测是它也适用于 Octave。

请注意,在这种情况下,您实际上根本不需要 arrayfun :

x>=2

应该在这里解决问题。

于 2013-05-15T11:56:05.360 回答