メインコンテンツ

cellfun

R2026b

cell 配列の各 cell に関数を適用

説明

A = cellfun(func,C) は、cell 配列 C の各 cell の内容に対して cell ごとに関数 func を適用します。次に cellfun は C の i 番目の要素について A(i) = func(C{i}) となるように func からの出力を出力配列 A に連結します。入力引数 func は関数ハンドルであり、この関数は 1 つの入力引数を取ってスカラーを返します。この構文を使用するには、func からの出力が常に同じデータ型でなければなりません。関数の出力のデータ型が異なる場合は、名前と値の引数 UniformOutput を false に設定する必要があります。配列 A と cell 配列 C は同じサイズです。

cellfun での A の要素の計算順序を指定したり、特定の順序で計算される要素に依存することはできません。

例

A = cellfun(func,C1,...,Cn) は、A(i) = func(C1{i},...,Cn{i}) となるように func を C1,...,Cn の cell の内容に適用します。関数 func は、n 個の入力引数を取ってスカラーを返さなければなりません。cell 配列 C1,...,Cn はすべて同じサイズでなければなりません。

例

A = cellfun(___,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションを使って func を適用します。たとえば、出力値を cell 配列で返すには、'UniformOutput',false を指定します。func の返した値を配列に連結できない場合に、cell 配列として A を返すことができます。前述の構文のいずれかの入力引数と Name,Value のペアの引数を使用することができます。

例

[A1,...,Am] = cellfun(___) は、func が m 個の出力値を返す場合に、複数の出力配列 A1,...,Am を返します。func は異なるデータ型の出力引数を返すことができますが、func の呼び出しごとに各出力のデータ型は同じでなければなりません。この構文では、前述の構文の入力引数のいずれかを使用できます。

func の出力引数の数は、C1,...,Cn に指定された入力引数の数と一致する必要はありません。

例

例

すべて折りたたむ

異なるサイズの数値配列を含む cell 配列を作成します。

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

各数値配列の平均値を計算し、その平均値を配列で返します。

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

    5.5000    4.0000       NaN

異なるサイズの数値配列を含む 2 つの cell 配列を作成します。

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

配列をプロットします。関数 plot から chart line オブジェクトの配列を返し、これらを使用して各データ点セットに異なるマーカーを追加します。cellfun は、そのデータ型のオブジェクトが連結できる限り、任意のデータ型の配列を返すことができます。

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

Figure contains an axes object. The axes object contains 3 objects of type line.

異なるサイズの数値配列を含む cell 配列を作成します。

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

C 内の各配列のサイズを計算します。行数と列数はそれぞれ 1 行 3 列の数値配列で表されます。

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

     1     3     0

ncols = 1×3

    10     1     0

cellfun を使用して文字ベクトルの cell 配列および string 配列に関数を適用できます。cellfun はこの 2 種類の配列を同様に処理します。

曜日の名前を含む文字ベクトルの cell 配列を作成します。

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

関数 cellfun を使用して名前の 3 文字の省略形を作成します。最初の 3 文字を抽出してそれらを文字ベクトルとして返す関数を指定します。省略形を cell 配列に返すには、名前と値のペア 'UniformOutput',false を指定します。

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

string 配列に対して cellfun を呼び出すこともできます。互換性を保つために、cellfun は string 配列の各要素を文字ベクトルとして処理します。テキストを返す関数を指定した場合、cellfun は string 配列ではなく、文字ベクトルの cell 配列としてテキストを返します。

cellfun を使用して string 配列内にある名前の省略形を作成します。

str = ["Saturday","Sunday"]
str = 1×2 string
    "Saturday"    "Sunday"

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

入力引数

すべて折りたたむ

入力 cell 配列の cell の内容に適用する関数。関数ハンドル、文字ベクトルまたは string スカラーとして指定します。

func は複数の関数ファイルに対応できるため、オーバーロードされた関数セットを表すことができます。このような場合、MATLAB® は入力引数のクラスに基づいて呼び出す関数を決定します。

下位互換性

func を関数ハンドルではなく、文字ベクトルまたは string スカラーとして指定できますが、これは限られた関数名セット 'isempty'、'islogical'、'isreal'、'length'、'ndims'、'prodofsize'、'size'、'isclass' に対してのみです。ただし、これらの関数を文字ベクトルまたは string として指定することは、すべてのデータ型で可能なわけではありません。たとえば、cell 配列に string または table が含まれている場合は、関数ハンドルを使用しなければなりません。

関数ハンドルではなく関数名を指定した場合は、以下のようになります。

  • cellfun は、関数のオーバーロードされたバージョンを呼び出しません。

  • 関数 size および isclass では、関数 cellfun に以下のような追加の入力が必要です。

    A = cellfun('size',C,k) は、C の各要素について k 番目の次元におけるサイズを返します。

    A = cellfun('isclass',C,classname) は、classname 引数と一致する C の各要素について logical 1 (true) を返します。この構文は、classname のサブクラスであるオブジェクトに対しては logical 0 (false) を返します。

例: A = cellfun(@mean,C) は C の要素の平均値を返します。

入力配列。cell 配列または string 配列として指定します。C が string 配列である場合、cellfun は C の各要素を string ではなく文字ベクトルとして扱います。

名前と値の引数

すべて折りたたむ

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: A = cellfun(@mean,C,'UniformOutput',false) は mean からの出力を cell 配列で返します。C に数値行列が含まれ、mean がベクトルを返す場合は、名前と値のペア 'UniformOutput',false を使用します。

true または false。'UniformOutput' と、true (1) または false (0) のいずれかで構成されるコンマ区切りのペアとして指定します。

'UniformOutput' の値

説明

true (1)

cellfun は func の出力を配列に連結します。func は同じデータ型のスカラーを返す必要があり、そうでない場合、このオプションを使用すると cellfun はエラーになります。

false (0)

cellfun は、func の出力を cell 配列で返します。func の出力は、任意のサイズと異なるデータ型をもつことができます。

エラーをキャッチする関数。'ErrorHandler' と関数ハンドルで構成されるコンマ区切りのペアとして指定します。func がエラーをスローした場合、'ErrorHandler' で指定されたエラー ハンドラーがエラーをキャッチし、その関数に指定されたアクションを実行します。エラー ハンドラーはエラーをスローするか、または func と同じ出力数を返さなければなりません。'UniformOutput' の値が true の場合、エラー ハンドラーの出力引数は func の出力と同じデータ型のスカラーでなければなりません。

エラー ハンドラーの最初の入力引数は、次のフィールドをもつ構造体です。

  • identifier — エラー識別子

  • message — エラー メッセージ テキスト

  • index — func がエラーをスローした入力配列の線形インデックス

エラー ハンドラーの残りの入力引数は、func がエラーをスローした原因である func の呼び出しの入力引数です。

func が出力引数として 2 つの double 型を返すと仮定します。エラー ハンドラーを 'ErrorHandler',@errorFunc として指定できます。ここで、errorFunc は警告を発行して 2 つの出力引数を返す関数です。

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

'ErrorHandler' を指定しない場合、cellfun は func がスローしたエラーを再スローします。

出力引数

すべて折りたたむ

出力配列。任意のデータ型の配列または cell 配列として返されます。

既定では、cellfun は func からの出力を配列に連結します。func はスカラーを返さなければなりません。func がオブジェクトを返す場合、そのオブジェクトが属するクラスは次の要件を満たさなければなりません。

  • オブジェクト配列の線形インデックス付けによる代入をサポートする

  • 入力と同じサイズをもつ配列を返す reshape メソッドをもつ

名前と値のペアの引数 'UniformOutput' の値が false (0) である場合、cellfun は出力を cell 配列で返します。その場合、func の出力は任意のサイズと異なるデータ型をもつことができます。

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入