ドキュメンテーション

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

arrayfun

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

構文

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

説明

[B1,...,Bm] = arrayfun(func,A1,...,An) は、関数ハンドル func で指定された関数を呼び出し、配列 A1,...,An の要素を渡します。ここで、n は関数 func への入力の数です。出力配列 B1,...,Bm は、関数呼び出しからの出力の組み合わせを含んでいます。ここで、m は関数 func からの出力の数です。i 番目の反復は、構文 [B1(i),...,Bm(i)] = func(A1(i),...,An(i)) に対応します。関数 arrayfun は、特定の順序で関数 func への呼び出しを実行しません。

[B1,...,Bm] = arrayfun(func,A1,...,An,Name,Value) では、1 つまたは複数の Name,Value の引数ペアで指定された追加オプションを使用して、関数 func を呼び出します。Name に設定可能な値は、'UniformOutput' または 'ErrorHandler' です。

入力引数

func

n 個の入力引数を受け入れて m 個の出力引数を返す関数のハンドル。

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

A1,...,An

関数 func に必要な n 個の入力を含む配列。各配列は同じ次元をもっていなければなりません。配列は数値、文字、論理、セル、構造体、またはユーザー定義オブジェクトの配列にすることができます。

任意の入力 A がユーザー定義オブジェクト配列であり、subsref または size メソッドをオーバーロードした場合、arrayfun は以下の条件を要求します。

  • size メソッドはタイプ double の配列を返します。

  • オブジェクト配列は線形インデックスをサポートします。

  • size メソッドによって返されるサイズの積は、配列への線形インデックスによって定義されたように、配列の制限を超えません。

名前/値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順番で指定できます。

'UniformOutput'

論理値は以下のとおりです。

true (1)

すべての入力に対して、関数 func からの各出力が、常に同じ型とサイズをもつスカラー セル配列、スカラー構造体またはスカラー値になることを指定します。関数 arrayfun は、出力を配列 B1,...,Bm に統合します。ここで、m は関数出力の数です。各出力配列は、個々の関数出力と同じタイプです。

false (0)

関数 arrayfun が出力をセル配列 B1,...,Bm に組み込むように要求します。関数 func の出力は、任意のサイズまたはタイプにすることができます。

既定値: true

'ErrorHandler'

MATLAB が関数 func を実行しようとしたときに発生するすべてのエラーを検出する関数のハンドル。この関数を定義して、エラーを再スローするか、関数 func に対して有効な出力を返すようにします。

MATLAB は、以下の 2 つの入力引数を使用して、指定されたエラー処理関数を呼び出します。

  • 構造体には以下のフィールドがあります。

    identifier

    エラー識別子。

    message

    エラー メッセージ テキスト。

    index

    エラー発生時の入力セル配列の要素に対応する線形インデックス。

  • エラー発生時の関数 func への入力引数の集合。

出力引数

B1,...,Bm

関数 func から m 個の出力を収集する配列。各配列 B は、それぞれの入力 A1,...,An と同じサイズです。

関数 func は、異なるクラスの出力引数を返すことができます。ただし、UniformOutputtrue (既定の設定) の場合、以下の条件があります。

  • 関数 func の個々の出力は、スカラー値 (数値、論理値、文字)、スカラー構造体またはスカラー セル配列でなければなりません。

  • 特定の出力引数のクラスは、各入力セットに対して同じでなければなりません。対応する出力配列のクラスは、関数 func からの出力のクラスと同じです。

この節の例を実行するには、f1 フィールドで指定するサイズの異なる配列を使用して、非スカラー構造体配列を作成します。

s(1).f1 = rand(3, 6);
s(2).f1 = magic(12);
s(3).f1 = ones(5, 10);

f1 フィールドの要素数をカウントします。

counts = arrayfun(@(x) numel(x.f1), s)

構文 @(x) は無名関数を作成します。このコードは、以下の出力を返します。

counts =
    18   144    50

f1 フィールドの各配列のサイズを計算します。

[nrows, ncols] = arrayfun(@(x) size(x.f1), s)

このコードは、以下の出力を返します。

nrows =
     3    12     5
ncols =
     6    12    10

sf1 フィールドの各列の平均を計算します。出力は非スカラーなので、UniformOutputfalse に設定します。

averages = arrayfun(@(x) mean(x.f1), s, 'UniformOutput', false)

このコードは、以下の出力を返します。

averages = 
    [1x6 double]    [1x12 double]    [1x10 double]

追加の非スカラー構造体 t および u を作成して、構造体 st、および u にわたって配列の f1 フィールドにおける等価性をテストします。

t = s;  t(1).f1(:)=0;
u = s;  u(2).f1(:)=0;

same = arrayfun(@(x,y,z) isequal(x.f1, y.f1, z.f1), s, t, u)

このコードは、以下の出力を返します。

same =
     0     0     1

拡張機能

R2006a より前に導入

この情報は役に立ちましたか?