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

时间:2013-05-15 02:19:59

标签: matlab matrix octave scientific-computing

是否可以像在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 个答案:

答案 0 :(得分: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

有更多信息here

答案 1 :(得分:4)

在MATLAB中,您不需要if语句来描述您所描述的问题。事实上,使用arrayfun非常简单:

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

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

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

x>=2

应该在这里诀窍。