cell配列内の特定​の行を取り出し,それ​らの行を一つのcel​l配列にまとめること​はできますか?

一枚目の画像の3列目の値が4のとき,その行をすべて取り出して二枚目の画像のようにまとめたいのですが,可能でしょうか?
よろしくお願いします.

 採用された回答

Akira Agata
Akira Agata 2021 年 7 月 16 日

0 投票

対象の cell 配列を C1 とすると、以下のようにして抽出可能です。
idx = cellfun(@(x) x == 4, C1(:,3));
C2 = C1(idx,:);

3 件のコメント

Gamma1990
Gamma1990 2021 年 7 月 16 日
ご回答ありがとうございます.
無事まとめることはできたのですが,これはどのような仕組みで抽出しているのでしょうか?
配列C1の任意の行と3列目に対して,引数が4の無名関数を適用したものを配列C2の行要素に代入しているところまでは何とか分かったのですが,これによってなぜ4のある行だけを抽出できるのでしょうか?
基本的なことで恐れ入りますが,ご教授いただければ幸いです.
よろしくお願いいたします.
Atsushi Ueno
Atsushi Ueno 2021 年 7 月 16 日
⇒横槍⇒失礼致します
>配列要素にアクセスする方法は主に 3 つあり、位置によるインデックス付け、線形インデックス付け、論理インデックス付けです。上記回答や下記説明ではこの内3番目の論理インデックス付けを使っています。
「配列C1の任意の行と3列目に対して,引数が4の無名関数を適用したもの」の出力は下記のような論理インデックスです。
>> C1
C1 = 4×4 cell 配列
[1] [4×4 double] [1] [2]
[1] [4×4 double] [4] [2]
[1] [4×4 double] [3] [2]
[1] [4×4 double] [1] [2]
>> idx = cellfun(@(x) x == 4, C1(:,3))
idx = 4×1 logical 配列
0
1
0
0
この論理インデックスを用いて元のC1にアクセスすると、条件C1(:,3)==4を満足するCell配列の行(の全列)だけが出力されます。
C2 = C1(idx,:);
Gamma1990
Gamma1990 2021 年 7 月 17 日
ご回答ありがとうございます.
なるほど,idxによって条件を満たす要素の位置がわかるのですね.
大変勉強になりました.
改めてありがとうございました.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeCreating and Concatenating Matrices についてさらに検索

製品

リリース

R2020b

タグ

質問済み:

2021 年 7 月 16 日

コメント済み:

2021 年 7 月 17 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!