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

7 visualizaciones (últimos 30 días)
T K
T K el 27 de Nov. de 2024
Comentada: T K el 28 de Nov. de 2024
以前の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をした結果を引数として展開することができれば良さそうと考えているのですが、それを実現する方法を見つけることは出来ていません。
この問題に対する良い方法はございますでしょうか?ご教授いただければ幸いです。

Respuesta aceptada

Shunichi Kusano
Shunichi Kusano el 28 de Nov. de 2024
じつはセル配列にしてしまってコンマ区切りリストとして入力することで、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 comentario
T K
T K el 28 de Nov. de 2024
ありがとうございます、コンマ区切りリストについて初めて知りました。奥が深そうですのでゆっくりと理解していきたいと思います。
また、2進数についてのアイデアもありがとうございます。質問文の問題以降の作業にとってdec2binの結果は後処理が少し複雑になりそうなので今回はrepmatを採用する可能性が高いですが、いずれ使う機会がありそうですのでその際参考にさせていただきます。

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Productos


Versión

R2024b

Community Treasure Hunt

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

Start Hunting!