arrayfun
配列の個々の要素に関数を適用
構文
説明
は、B = arrayfun(func,A)A の要素ごとに関数 func を適用します。次に、arrayfun は A の i 番目の要素について B(i) = func(A(i)) となるように func の出力を出力配列 B に連結します。入力引数 func は、スカラーを返す関数への関数ハンドルです。この構文を使用するには、func からの出力が常に同じデータ型でなければなりません。関数の出力のデータ型が異なる場合は、名前と値の引数 UniformOutput を false に設定する必要があります。配列 A と B のサイズは同じです。
arrayfun での B の要素の計算順序を指定したり、特定の順序で計算される要素に依存することはできません。
は、1 つ以上の B = arrayfun(___,Name,Value)Name,Value のペアの引数で指定された追加オプションを使って func を適用します。たとえば、出力値を cell 配列で返すには、'UniformOutput',false を指定します。func の返した値を配列に連結できない場合に、cell 配列として B を返すことができます。前述の構文のいずれかの入力引数と Name,Value のペアの引数を使用することができます。
[B1,...,Bm] = arrayfun(___) は、func が m 個の出力値を返す場合に、複数の出力配列 B1,...,Bm を返します。func は異なるデータ型の出力引数を返すことができますが、func の呼び出しごとに各出力のデータ型は同じでなければなりません。この構文では、前述の構文の入力引数のいずれかを使用できます。
func の出力引数の数は、A1,...,An に指定された入力引数の数と一致する必要はありません。
例
入力引数
名前と値の引数
出力引数
制限
異種混合配列
UniformOutputがtrueに設定されている場合、arrayfunは異種混合配列をサポートしません。複素数からなる入力配列の動作の違い
入力配列
Aが複素数の配列であり、虚数部が 0 に等しい要素があると、arrayfun呼び出しと、配列のインデックス付けとで結果が異なる場合があります。arrayfunは、常にそのような数を虚数部が 0 に等しい複素数として扱います。しかし、インデックス付けは、そのような値を実数として返します。動作の違いを説明するために、まず複素数の配列を作成します。
A = zeros(2,1); A(1) = 1; A(2) = 0 + 1i
A = 1.0000 + 0.0000i 0.0000 + 1.0000i
次に cell 配列を作成し、
Aの要素を割り当てます。A(1)にインデックスを付けると、虚数部が 0 に等しいため、その値は実数として返されます。cell 配列は異なる型をもつデータを保存できるため、実数値と複素数値をC1の異なる cell に保存できます。C1 = cell(2,1); C1{1} = A(1); C1{2} = A(2)C1 = 2×1 cell array {[ 1]} {[0.0000 + 1.0000i]}arrayfunを呼び出して、Aの要素にアクセスします。値を cell 配列に割り当てます。arrayfunは、A(1)にアクセスするとき、この値を複素数として扱い、C2{1}に割り当てます。C2 = arrayfun(@(x) x, A, 'UniformOutput', false)C2 = 2×1 cell array {[1.0000 + 0.0000i]} {[0.0000 + 1.0000i]}
拡張機能
バージョン履歴
R2006a より前に導入
参考
structfun | cellfun | spfun | cell2mat | splitapply | varfun | rowfun | groupsummary
