ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

arrayfun

配列の個々の要素に関数を適用

構文

B = arrayfun(func,A)
B = arrayfun(func,A1,...,An)
B = arrayfun(___,Name,Value)
[B1,...,Bm] = arrayfun(___)

説明

B = arrayfun(func,A) は、A の要素ごとに関数 func を適用します。次に、arrayfunAi 番目の要素について B(i) = func(A(i)) となるように func の出力を出力配列 B に連結します。入力引数 func は関数ハンドルであり、この関数は 1 つの入力引数を取ってスカラーを返します。func からの出力には、その型のオブジェクトが連結できる限り、任意のデータ型を使用できます。配列 AB のサイズは同じです。

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

B = arrayfun(func,A1,...,An) は、B(i) = func(A1(i),...,An(i)) となるように func を配列 A1,...,An の要素に適用します。関数 func は、n 個の入力引数を取ってスカラーを返さなければなりません。配列 A1,...,An はすべて同じサイズでなければなりません。

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

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

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

すべて折りたたむ

非スカラー構造体配列を作成します。各構造体には、乱数のベクトルを含むフィールドが 1 つあります。ベクトルのサイズは異なります。

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

各構造体に数値配列を含む 2 つのフィールドがある構造体配列を作成します。

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 オブジェクトの配列を返し、これらを使用して各データ点セットに異なるマーカーを追加します。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

非スカラー構造体配列を作成します。各構造体には、数値行列を含むフィールドが 1 つあります。

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 は各列の平均を含むベクトルを返すため、平均は配列として返されません。cell 配列で平均を返すには、名前と値のペア '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 の各フィールドのサイズを計算します。行数と列数はそれぞれ 1 行 3 列の数値配列で表されます。

[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) は平均を cell 配列で返します。S は構造体配列であり、その各構造体に f1 という名前のフィールドがあります。

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

'UniformOutput' の値

説明

true (1)

func は、arrayfun が配列に連結するスカラーを返さなければなりません。

false (0)

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

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

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

  • identifier — エラー識別子

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

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

エラー ハンドラーの残りの入力引数は、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' を指定しない場合、arrayfunfunc がスローしたエラーを再スローします。

出力引数

すべて折りたたむ

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

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

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

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

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

拡張機能

R2006a より前に導入