2013-05-15 1 views
4

Octave에서 다음과 같이 arrayfun에서 "if"를 사용할 수 있습니까?Octave/Matlab의 arrayfun에서 if 절 사용

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에서 허용되는 경우?

답변

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입니다.

+0

감사합니다. 몰리가 도움이됩니다. –

4

MATLAB에서는 설명하는 문제에 대해 if 문을 사용할 필요가 없습니다. 실제로 arrayfun을 사용하는 것이 매우 간단합니다.

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

내 생각에 옥타브에서도 작동합니다.

x>=2 

여기에 트릭을 수행해야합니다 당신이 실제로하지

주에서이 모든 경우에 arrayfun해야합니다.

+0

감사합니다. Dennis, 그건 의미가 있습니다. –