Supponiamo di disporre di contenitori n
in cui stiamo lanciando palle . Che cosa è un veloce (vale a dire utilizzando numpy/scipy anziché codice python) per generare tutti i possibili risultati come una matrice?Generare tutti i possibili risultati di k sfere in n bin (somma di risultati multinomiali/categoriali)
Per esempio, se n = 4
e k = 3
, vorremmo il seguente numpy.array
:
3 0 0 0
2 1 0 0
2 0 1 0
2 0 0 1
1 2 0 0
1 1 1 0
1 1 0 1
1 0 2 0
1 0 1 1
1 0 0 2
0 3 0 0
0 2 1 0
0 2 0 1
0 1 2 0
0 1 1 1
0 1 0 2
0 0 3 0
0 0 2 1
0 0 1 2
0 0 0 3
Mi scuso se ogni permutazione è stato mancato, ma questo è l'idea generale. Le permutazioni generate non devono essere in alcun ordine particolare, ma l'elenco precedente era conveniente per iterare categoricamente attraverso di esse mentalmente.
Ancora meglio, c'è un modo per mappare ogni numero intero da 1 a multiset number (la cardinalità di questo elenco) direttamente a una determinata permutazione?
Questa domanda è legata a quelle che seguono, che sono attuate in R con molto diversi servizi:
- Generating all permutations of N balls in M bins
- Generate a matrix of all possible outcomes for throwing n dice (ignoring order)
riferimenti anche correlati:
- https://en.wikipedia.org/wiki/Stars_and_bars_(combinatorics)
- https://en.wikipedia.org/wiki/Multiset#Counting_multisets
- https://en.wikipedia.org/wiki/Combinatorial_number_system
Ha bisogno di essere in questo ordine? – Kupiakos
@Kupiakos no. E non avevo capito, la persona che ha postato quella prima domanda ha fatto la stessa lista. –
Pensando in termini di [stelle e barre] (https://en.wikipedia.org/wiki/Stars_and_bars_ (combinatorics)), utilizzare un algoritmo per "combinazioni unranking" per trovare le posizioni delle barre (o delle stelle). Uno di questi algoritmi è descritto qui: [Trovare la combinazione k per un dato numero] (https://en.wikipedia.org/wiki/Combinatorial_number_system#Finding_the_k-combination_for_a_given_number). –