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

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

 Accepted Answer

Akira Agata
Akira Agata on 16 Jul 2021

0 votes

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

3 Comments

Gamma1990
Gamma1990 on 16 Jul 2021
ご回答ありがとうございます.
無事まとめることはできたのですが,これはどのような仕組みで抽出しているのでしょうか?
配列C1の任意の行と3列目に対して,引数が4の無名関数を適用したものを配列C2の行要素に代入しているところまでは何とか分かったのですが,これによってなぜ4のある行だけを抽出できるのでしょうか?
基本的なことで恐れ入りますが,ご教授いただければ幸いです.
よろしくお願いいたします.
⇒横槍⇒失礼致します
>配列要素にアクセスする方法は主に 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 on 17 Jul 2021
ご回答ありがとうございます.
なるほど,idxによって条件を満たす要素の位置がわかるのですね.
大変勉強になりました.
改めてありがとうございました.

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2020b

Tags

Asked:

on 16 Jul 2021

Commented:

on 17 Jul 2021

Community Treasure Hunt

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

Start Hunting!