セル配列、構造体、構造体配列の各要素に対して、for文を用いずに同じ関数を一括して適用する方法はありますか?
19 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
MathWorks Support Team
el 25 de Oct. de 2013
Editada: MathWorks Support Team
el 30 de Mayo de 2024
セル配列、構造体、構造体配列の各要素に対して、for文を用いずに同じ関数を一括して適用する方法はありますか?
Respuesta aceptada
MathWorks Support Team
el 8 de Mayo de 2024
Editada: MathWorks Support Team
el 30 de Mayo de 2024
MATLAB 7.1(R14SP3)以降のバージョンでは、機能拡張された関数cellfun や、新規に追加された関数structfun、関数arrayfun を用いることで、データの各要素に任意の関数を一括して適用することができます。
各関数の概要と実行例を下記に示します。
● cellfun :セル配列の各要素に対して関数を適用
● structfun:構造体の各フィールドに対して関数を適用
● arrayfun :構造体配列を含む配列の各要素に対して関数を適用
(複数の入出力を持つ関数に対しても適用可能)
■セル配列の各要素に対して関数lengthを実行する場合の例
>> cellArray = {'abcde', 3; [5 6], 'mnopqr'};
>> b = cellfun(@length, cellArray)
b =
5 1
2 6
■構造体の各フィールドに関数std を適用する場合の例
>> sensorData.sensor1 = [12 34 23 28 43];
>> sensorData.sensor2 = [14 38 44 38 56];
>> result = structfun(@std, sensorData)
result =
11.6404
15.2971
■構造体配列のDataフィールドに5より大きな値を含むかどうかを調べる例
>> sArray(1).Data = [12 5 10];
>> sArray(2).Data = [];
>> sArray(3).Data = [4];
>> sArray(4).Data = [12];
>> output = arrayfun(@(y) ~isempty(find(y.Data > 5)), sArray)
output =
1 0 0 1
なお、関数cellfun は、MATLAB 7.1 (R14SP3)より前のバージョンにおいては、下記の関数をセル配列の各要素に適用する関数として提供されています。
'isreal' -- 実数セル要素に対して、真
'isempty' -- 空セル要素に対して、真
'islogical' -- 論理セル要素に対して、真
'length' -- セル要素の長さ
'ndims' -- セル要素の次元数
'prodofsize' -- セル要素の中の要素数
下記 URL にも本件に関する情報が記載されています。
●MATLAB Digest - March 2006:New Functions for Vectorizing Operations on Any Data Type
0 comentarios
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!