이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

arrayfun

배열의 각 요소에 각각 함수 적용

설명

예제

B = arrayfun(func,A)는 한 번에 하나씩, A의 요소에 함수 func를 적용합니다. 그러면 arrayfun 함수가 func 함수의 출력값을 출력 배열 B로 결합하므로, Ai번째 요소의 경우 B(i) = func(A(i))가 됩니다. 입력 인수 func는 하나의 입력 인수를 받고 스칼라를 반환하는 함수에 대한 함수 핸들입니다. func의 출력값은 해당 데이터형의 객체를 결합할 수 있는 한, 어떤 데이터형이든 될 수 있습니다. 배열 AB의 크기는 같습니다.

사용자는 arrayfunB의 요소를 계산하는 순서를 지정할 수 없으며, 또는 특정 순서로 계산을 수행하기를 기대할 수도 없습니다.

B = arrayfun(func,A1,...,An)B(i) = func(A1(i),...,An(i))가 성립되도록 배열 A1,...,An의 요소에 func를 적용합니다. func 함수는 n개 입력 인수를 가져와서 스칼라를 반환해야 합니다. 배열 A1,...,An은 모두 크기가 같아야 합니다.

예제

B = arrayfun(___,Name,Value)는 하나 이상의 Name,Value 쌍 인수를 추가 옵션으로 지정하여 func를 적용할 때 사용합니다. 예를 들어, 출력값을 셀형 배열로 반환하려면 'UniformOutput',false를 지정하십시오. func가 배열로 결합할 수 없는 값을 반환할 때 B를 셀형 배열로 반환할 수 있습니다. 위에 열거된 구문 중 하나의 입력 인수와 함께 Name,Value 쌍 인수를 사용할 수 있습니다.

예제

[B1,...,Bm] = arrayfun(___)funcm개 출력값을 반환할 때 여러 개의 출력 배열 B1,...,Bm을 반환합니다. func는 데이터형이 다른 출력 인수를 반환할 수 있지만, func가 호출될 때 각 출력값의 데이터형은 동일해야 합니다. 이 구문은 위에 열거된 구문 중 하나의 입력 인수에 사용할 수 있습니다.

func에서 생성된 출력 인수 개수가 A1,...,An으로 지정된 입력 인수 개수와 같을 필요는 없습니다.

예제

모두 축소

비 스칼라 구조체형 배열을 만듭니다. 각 구조체에는 난수의 벡터를 포함하는 필드가 있습니다. 벡터의 크기는 서로 다릅니다.

S(1).f1 = rand(1,5);
S(2).f1 = rand(1,10);
S(3).f1 = rand(1,15)
S = 1x3 struct array with fields:
    f1

arrayfun 함수를 사용하여 S 내 각 필드의 평균을 계산합니다. structfun에 대한 입력 인수는 스칼라 구조체여야 하므로 이 계산에는 structfun 함수를 사용할 수 없습니다.

A = arrayfun(@(x) mean(x.f1),S)
A = 1×3

    0.6786    0.6216    0.6069

각각의 구조체가 숫자형 배열을 포함한 두 개의 필드를 갖는 구조체형 배열을 만듭니다.

S(1).X = 5:5:100; S(1).Y = rand(1,20);
S(2).X = 10:10:100; S(2).Y = rand(1,10);
S(3).X = 20:20:100; S(3).Y = rand(1,5)
S = 1x3 struct array with fields:
    X
    Y

숫자형 배열을 플로팅합니다. plot 함수에서 chart line 객체로 구성된 배열을 반환하고 chart line 객체를 사용하여 각 데이터 점 집합에 다른 마커를 추가합니다. arrayfun은 데이터형의 객체를 결합할 수 있다면 어떤 데이터형의 배열도 반환할 수 있습니다.

figure
hold on
p = arrayfun(@(a) plot(a.X,a.Y),S);
p(1).Marker = 'o';
p(2).Marker = '+';
p(3).Marker = 's';
hold off

비 스칼라 구조체형 배열을 만듭니다. 각 구조체에는 숫자형 행렬을 포함하는 필드가 있습니다.

S(1).f1 = rand(3,5);
S(2).f1 = rand(6,10);
S(3).f1 = rand(4,2)
S = 1x3 struct array with fields:
    f1

arrayfun 함수를 사용하여 S 내 각 필드의 평균을 계산합니다. mean은 각 열의 평균을 포함하는 벡터를 반환하므로, 평균은 배열로 반환할 수 없습니다. 평균을 셀형 배열로 반환하려면 'UniformOutput',false 이름-값 쌍을 지정하십시오.

A = arrayfun(@(x) mean(x.f1),S,'UniformOutput',false)
A = 1x3 cell array
    {1x5 double}    {1x10 double}    {1x2 double}

비 스칼라 구조체형 배열을 만듭니다.

S(1).f1 = 1:10;
S(2).f1 = [2; 4; 6];
S(3).f1 = []
S = 1x3 struct array with fields:
    f1

arrayfun 함수를 사용하여 S 내 각 필드의 크기를 계산합니다. 행 개수와 열 개수가 각각 1x3 숫자형 배열로 표시됩니다.

[nrows,ncols] = arrayfun(@(x) size(x.f1),S)
nrows = 1×3

     1     3     0

ncols = 1×3

    10     1     0

입력 인수

모두 축소

입력 배열의 요소에 적용할 함수로, 함수 핸들로 지정됩니다.

func는 둘 이상의 함수 파일에 대응할 수 있으며, 따라서 일련의 오버로드된 함수를 나타낼 수 있습니다. 이러한 경우 MATLAB®은 입력 인수의 클래스에 따라 어떤 함수를 호출할지를 결정합니다.

예: B = arrayfun(@round,A)A 내 각 요소의 정수 부분을 반환합니다.

입력 배열. A는 모든 데이터형을 가질 수 있습니다.

A가 속하는 클래스를 정의하고 Asubsref 또는 size 메서드도 오버로드하면 arrayfun은 이러한 요구 사항을 A에 표시합니다.

  • Asize 메서드는 double형의 배열을 반환해야 합니다.

  • A는 선형 인덱싱을 지원해야 합니다.

  • size 메서드에서 반환되는 크기의 곱이, A에 대한 선형 인덱싱으로 정의되는 A의 제한을 초과하지 않아야 합니다.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: A = arrayfun(@(x) mean(x.f1),S,'UniformOutput',false)는 평균을 셀형 배열로 반환합니다. S는 각 구조체에 f1이라는 필드가 있는 구조체형 배열입니다.

true 또는 false로, 'UniformOutput'과 함께 true(1)나 false(0)가 쉼표로 구분되어 지정됩니다.

'UniformOutput'의 값

설명

true (1)

funcarrayfun이 배열로 결합하는 스칼라를 반환해야 합니다.

false (0)

arrayfunfunc의 출력값을 셀형 배열로 반환합니다. func의 출력값은 크기 제한이 없으며 다양한 데이터형을 포함할 수 있습니다.

오류를 포착하는 함수로, 'ErrorHandler'와 함께 함수 핸들이 쉼표로 구분되어 지정됩니다. func에서 오류가 발생하면 'ErrorHandler'로 지정된 오류 핸들러는 오류를 포착하고 함수에 지정된 동작을 수행합니다. 오류 핸들러는 오류를 발생시키거나 func와 동일한 개수의 출력값을 반환해야 합니다. 'UniformOutput'의 값이 true인 경우 오류 핸들러의 출력 인수는 스칼라여야 하며 func의 출력값과 데이터형이 같아야 합니다.

오류 핸들러의 첫 번째 입력 인수는 다음 필드를 포함하는 구조체입니다.

  • identifier — 오류 ID

  • message — 오류 메시지 텍스트

  • index — 입력 배열 중 func가 오류를 발생시킨 위치에 대한 선형 인덱스

오류 핸들러에 대한 나머지 입력 인수는 func에서의 오류 발생을 초래한, func 호출에 대한 입력 인수입니다.

func가 두 개의 double형을 출력 인수로 반환한다고 가정하겠습니다. 오류 핸들러를 'ErrorHandler',@errorFunc로 지정할 수 있습니다. 여기서 errorFunc는 경고를 발생시키고 두 개의 출력 인수를 반환하는 함수입니다.

function [A,B] = errorFunc(S,varargin)
    warning(S.identifier, S.message); 
    A = NaN; 
    B = NaN;
end

'ErrorHandler'를 지정하지 않을 경우 arrayfunfunc에서 발생한 오류를 다시 발생시킵니다.

출력 인수

모두 축소

출력 배열로, 모든 데이터형의 배열 또는 셀형 배열로 반환됩니다.

기본적으로 arrayfunfunc의 출력값을 배열로 결합합니다. func는 스칼라를 반환해야 합니다. func가 객체를 반환할 경우 객체가 속한 클래스는 다음 요구 사항을 충족해야 합니다.

  • 객체 배열에 대한 선형 인덱싱에 따른 할당 지원

  • 입력값과 같은 크기의 배열을 반환하는 reshape 메서드 포함

'UniformOutput' 이름-값 쌍의 인수 값이 false(0)인 경우 arrayfun은 출력값을 셀형 배열로 반환합니다. 이 경우 func의 출력값은 크기 제한이 없으며 서로 다른 데이터형을 가질 수 있습니다.

확장 기능

R2006a 이전에 개발됨