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 Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

릴리스

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!