combinatio​nsで同じ配列を複数​回引数に取る方法

조회 수: 7 (최근 30일)
T K
T K 2024년 11월 27일
댓글: T K 2024년 11월 28일
以前のAnswers、
では"[0 1]から重複を許して3つ選び,それらを並べるパターンを列挙する問題"として、その回答に
T = combinations([0 1], [0 1], [0 1])
T = 8x3 table
Var1 Var2 Var3 ____ ____ ____ 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
という例が掲載されていました。
私は、"[0 1]から重複を許してn個選び,それらを並べるパターンを列挙する問題"を考えています。
  • combinationsにはpythonのitertoolsでいうところのrepeatのようなオプションがないため、combinationsの使用をする場合はn回直書きする必要がある。nはよく切り替える数値のため、直書きは避けたい。
  • リンク先の最初の回答例、meshgridは3次までなのに対し、nは4以上を検討しているためmeshgridは不適。また、ndgridもcomibinationsと同様に、直書きする必要があるように見える。
repmatをした結果を引数として展開することができれば良さそうと考えているのですが、それを実現する方法を見つけることは出来ていません。
この問題に対する良い方法はございますでしょうか?ご教授いただければ幸いです。

채택된 답변

Shunichi Kusano
Shunichi Kusano 2024년 11월 28일
じつはセル配列にしてしまってコンマ区切りリストとして入力することで、repmatが利用できます。何を言っているかわからないかと思いますが、下記の流れです。
n = 4; % 自由に変えてください。
in = repmat({[0 1]},1,n);
in{:} % これがコンマ区切りリストです。
ans = 1×2
0 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
ans = 1×2
0 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
ans = 1×2
0 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
ans = 1×2
0 1
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
T = combinations(in{:}) % combinations([0 1],[0 1],[0 1],[0 1])と同じ意味です。
T = 16x4 table
Var1 Var2 Var3 Var4 ____ ____ ____ ____ 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
結果を見て気付きましたが、これは2のn乗-1までの数を二進数に変換したときそのものなので下記でもイイのではないかと思います。
T2 = dec2bin(0:2^n-1)
T2 = 16x4 char array
'0000' '0001' '0010' '0011' '0100' '0101' '0110' '0111' '1000' '1001' '1010' '1011' '1100' '1101' '1110' '1111'
  댓글 수: 1
T K
T K 2024년 11월 28일
ありがとうございます、コンマ区切りリストについて初めて知りました。奥が深そうですのでゆっくりと理解していきたいと思います。
また、2進数についてのアイデアもありがとうございます。質問文の問題以降の作業にとってdec2binの結果は後処理が少し複雑になりそうなので今回はrepmatを採用する可能性が高いですが、いずれ使う機会がありそうですのでその際参考にさせていただきます。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

제품


릴리스

R2024b

Community Treasure Hunt

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

Start Hunting!