Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

cellfun

셀형 배열의 각 셀에 함수 적용

설명

A = cellfun(func,C)는 한 번에 셀 하나씩, 셀형 배열 C의 각 셀 내용에 함수 func를 적용합니다. 그런 다음 cellfunfunc 함수의 출력값을 출력 배열 A와 결합하므로, Ci번째 요소의 경우, A(i) = func(C{i})입니다. 입력 인수 func는 하나의 입력 인수를 받고 스칼라를 반환하는 함수에 대한 함수 핸들입니다. 이 구문을 사용하려면 func의 출력값이 항상 동일한 데이터형이어야 합니다. 함수 출력값의 데이터형이 서로 다른 경우 UniformOuput 이름-값 인수를 false로 설정해야 합니다. 배열 A와 셀형 배열 C의 크기는 동일합니다.

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

예제

A = cellfun(func,C1,...,Cn)C1,...,Cn의 셀 내용에 func를 적용하므로, A(i) = func(C1{i},...,Cn{i})입니다. func 함수는 n개 입력 인수를 가져와서 스칼라를 반환해야 합니다. 셀형 배열 C1,...,Cn은 모두 크기가 동일해야 합니다.

예제

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

예제

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

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

예제

예제

모두 축소

크기가 다른 숫자형 배열을 포함하는 셀형 배열을 만듭니다.

C = {1:10, [2; 4; 6], []}
C=1×3 cell array
    {[1 2 3 4 5 6 7 8 9 10]}    {3x1 double}    {0x0 double}

각 숫자형 배열의 평균을 계산하여 배열로 반환합니다.

A = cellfun(@mean,C)
A = 1×3

    5.5000    4.0000       NaN

크기가 다른 숫자형 배열을 포함하는 셀형 배열을 2개 만듭니다.

X = {5:5:100, 10:10:100, 20:20:100};
Y = {rand(1,20), rand(1,10), rand(1,5)};

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

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

크기가 다른 숫자형 배열을 포함하는 셀형 배열을 만듭니다.

C = {1:10, [2; 4; 6], []}
C=1×3 cell array
    {[1 2 3 4 5 6 7 8 9 10]}    {3x1 double}    {0x0 double}

C에 있는 각 배열의 크기를 계산합니다. 행 개수와 열 개수가 각각 1×3 숫자형 배열로 표시됩니다.

[nrows,ncols] = cellfun(@size,C)
nrows = 1×3

     1     3     0

ncols = 1×3

    10     1     0

cellfun을 사용하여 문자형 벡터로 구성된 셀형 배열과 string형 배열에 함수를 적용할 수 있습니다. cellfun은 두 가지 종류의 배열을 동일하게 취급합니다.

평일 이름을 포함하는 문자형 벡터로 구성된 셀형 배열을 만듭니다.

C = {'Monday','Tuesday','Wednesday','Thursday','Friday'}
C = 1x5 cell
    {'Monday'}    {'Tuesday'}    {'Wednesday'}    {'Thursday'}    {'Friday'}

cellfun 함수를 사용하여 이름에 대한 3자 약어를 만듭니다. 처음 3자를 추출하여 문자형 벡터로 반환하는 함수를 지정합니다. 약어를 셀형 배열로 반환하려면 'UniformOutput',false 이름-값 쌍을 지정하십시오.

A = cellfun(@(x) x(1:3),C,'UniformOutput',false)
A = 1x5 cell
    {'Mon'}    {'Tue'}    {'Wed'}    {'Thu'}    {'Fri'}

또한 string형 배열에 대해 cellfun을 호출할 수 있습니다. 호환성을 위해 cellfun은 string형 배열의 각 요소를 문자형 벡터인 것처럼 취급합니다. 텍스트를 반환하는 함수를 지정하면 cellfun이 텍스트를 string형 배열이 아닌, 문자형 벡터로 구성된 셀형 배열로 반환합니다.

cellfun을 사용하여 string형 배열의 이름에 대한 약어를 만듭니다.

str = ["Saturday","Sunday"]
str = 1x2 string
    "Saturday"    "Sunday"

B = cellfun(@(x) x(1:3),str,'UniformOutput',false)
B = 1x2 cell
    {'Sat'}    {'Sun'}

입력 인수

모두 축소

입력 셀형 배열의 셀 내용에 적용하는 함수로, 함수 핸들, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

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

이전 버전과의 호환성

func를 함수 핸들이 아니라 문자형 벡터나 string형 스칼라로 지정할 수 있지만 제한된 함수 이름인 'isempty', 'islogical', 'isreal', 'length', 'ndims', 'prodofsize', 'size' 또는 'isclass'에 대해서만 가능합니다. 그러나 이러한 함수를 문자형 벡터나 string형으로 지정하면 일부 데이터형에서는 작동하지 않습니다. 예를 들어, 셀형 배열에 string형이나 테이블이 포함된 경우 함수 핸들을 사용해야 합니다.

함수 핸들 대신 함수 이름을 지정하면:

  • cellfun은 함수의 오버로드된 버전은 호출하지 않습니다.

  • size 함수와 isclass 함수를 사용하려면 cellfun 함수에 추가로 입력값을 입력해야 합니다.

    A = cellfun('size',C,k)C의 각 요소의 k번째 차원을 따라 크기를 반환합니다.

    A = cellfun('isclass',C,classname)classname 인수와 일치하는 C의 각 요소에 대해 논리값 1(true)을 반환합니다. 이 구문은 classname의 서브클래스인 객체에 대해서는 논리값 0(false)을 반환합니다.

예: A = cellfun(@mean,C)C를 구성하는 요소의 평균을 반환합니다.

입력 배열로, 셀형 배열이나 string형 배열로 지정됩니다. C가 string형 배열이면 cellfunC의 각 요소를 string형이 아닌, 문자형 벡터인 것처럼 취급합니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: A = cellfun(@mean,C,'UniformOutput',false)mean의 출력값을 셀형 배열로 반환합니다. C에 숫자형 행렬이 있고 mean이 벡터를 반환하는 경우 'UniformOutput',false 이름-값 쌍을 사용하십시오.

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

'UniformOutput'의 값

설명

true (1)

cellfun 함수는 func 출력값을 배열로 결합합니다. 이 옵션을 선택할 경우 func는 동일한 데이터형의 스칼라를 반환해야 하며, 그렇지 않으면 cellfun에서 오류가 발생됩니다.

false (0)

cellfun 함수는 func의 출력값을 셀형 배열로 반환합니다. 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'를 지정하지 않을 경우 cellfun 함수는 func에서 발생한 오류를 다시 발생시킵니다.

출력 인수

모두 축소

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

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

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

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

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

확장 기능

버전 내역

R2006a 이전에 개발됨