MATLABでスクリプトを作成すると、しばしばセル配列の中に配列やセル配列が格納されるような状態になります。
一例をあげると、複数のモデルを一気に検索するためにcellfun()関数を使ってfind_system()関数を行うような場合です。
そのような場合に一つのセル配列にまとめてしまう方法を紹介します。
セル配列の中に配列が入るサンプル
以下のスクリプトは’modelA’と’modelB’からOutportブロックのパスを抽出するスクリプトです。
modelName = {'modelA'; 'modelB'};
blockPath = cellfun(@(x) find_system(x, 'BlockType', 'Outport'), modelName, 'UniformOutput', false);
これを実行すると以下のようにセル配列の中にセル配列が入っている状態になります。
この状態で、例えば2番目のセル配列の3番目に入っている値を取り出そうとすると
blockPath{2, 1}{3, 1}
と指定しないといけないため、使い勝手が良くありません。
そこでセル配列の中にセル配列がある状態を解消するため、以下のスクリプトを実行します。
cat(1, blockPath{:});
実行すると以下のように一つのセル配列としてまとめなおすことができます。
横方向の配列を結合する場合
先ほどの例はセル配列の中に縦方向の配列が入っているパターンでしたが、セル配列の中に横方向の配列が入っている場合も同様に行えます。
以下はセル配列の1行1列目に[1 2 3]が、2行1列目に[4 5]という配列が格納されている場合の例です。
縦方向の配列を連結する際はcat関数の第1引数に”1″を指定しましたが、この例のように横方向の配列を連結する場合は”2″を指定します。
コメント