「nchoosek」​関数で、配列番号を取​得する方法

16 views (last 30 days)
s
s on 17 Jul 2023
Commented: s on 17 Jul 2023
matlabでは組み合わせとして、「nchoosek」関数があります。
以下のような場合、解決する方法があれば、教えていただけると幸いです。
例えば、以下のような同じ配列数の変数「A」と「B」があるとします。
A = [3 4 5 6]
B = [13 14 15 16]
この変数は同じ配列数でそれぞれの同じ配列番号の値が対応しています。
つまり、A(1)とB(1)、A(2)とB(2)、…、A(4)とB(4)はセットで今後扱いたいです。
しかし、「nchoosek」関数は返り値に、インデックス(配列番号)を返せないため、変数Aの組み合わせの結果に対応した変数Bの結果を取得できません。
Acon = nchoosek(A,2) % 変数「A」の中から2つ選ぶ場合の組み合わせ
この変数Aconに(3,5)という組み合わせの結果がきた時、同じ配列番号の変数Bも取得したいです。
つまり、(13,15)も欲しいということです。
何かいい方法がありましたら、教えていただけますと助かります。
よろしくお願い申し上げます。

Accepted Answer

交感神経優位なあかべぇ
nchoosekの引数1にインデックスを渡せばよいのではと思います。
A = [3 4 5 6];
B = [13 14 15 16];
idx = 1 : length(A);% インデックスの作成
sek_idx = nchoosek(idx,2);% インデックスから2つ選択
sek_A = A(sek_idx)% Aへ選択インデックスの当てはめ
sek_A = 6×2
3 4 3 5 3 6 4 5 4 6 5 6
sek_B = B(sek_idx)% Bへ選択インデックスの当てはめ
sek_B = 6×2
13 14 13 15 13 16 14 15 14 16 15 16
sek_A_3_5_idx = all(sek_A == [3,5], 2); % 3,5と一致する行を検索
sek_B(sek_A_3_5_idx, :)% Aの3,5と同じ行のBを表示
ans = 1×2
13 15
  1 Comment
s
s on 17 Jul 2023
ありがとうございます。
引数にインデックスを渡すことで解決できました。
感謝申し上げます。

Sign in to comment.

More Answers (0)

Categories

Find more on Matrix Indexing in Help Center and File Exchange

Tags

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!