2 votes

Toutes les permutations avec remplacement en Julia

Supposons qu'il n'y ait que 3 étudiants. Soient R et G les couleurs des uniformes qu'un étudiant peut avoir. Soit S l'ensemble de couleurs (permutations) que les étudiants portent un jour particulier. Comment puis-je générer l'espace d'échantillonnage en Julia ?

S = {RRR,RRG,RGR,RGG,GRR,GRG,GGR,GGG}

using Combinatorics
colors = ['R','G']
n = 3
b = permutations(colors,n)
 for a in b
       print(a)
       end

ne donne rien.

Réf : Comment générer toutes les permutations d'un tableau en Julia ?

Julia: Ensembles uniques de n éléments avec remplacement est lié mais ne résout pas clairement le problème

3voto

Mark Hill Points 398

Ce que vous recherchez est équivalent au produit du vecteur de couleurs avec lui-même trois fois :

en utilisant IterTools 

IterTools.product(colors, colors, colors) |> collect

# ou 

IterTools.product(fill(colors, n)...) |> collect

Sortie :

2×2×2 Tableau{Tuple{Char, Char, Char}, 3}:
[:, :, 1] =
 ('R', 'R', 'R')  ('R', 'G', 'R')
 ('G', 'R', 'R')  ('G', 'G', 'R')

[:, :, 2] =
 ('R', 'R', 'G')  ('R', 'G', 'G')
 ('G', 'R', 'G')  ('G', 'G', 'G')

2voto

Nils Gudat Points 2060

Voici une façon de le faire avec Combinatorics :

julia> reduce(vcat, collect(multiset_permutations(x, 3)) for x  with_replacement_combinations(["R", "G"], 3))
8-élément Vector{Vector{String}}:
 ["R", "R", "R"]
 ["R", "R", "G"]
 ["R", "G", "R"]
 ["G", "R", "R"]
 ["R", "G", "G"]
 ["G", "R", "G"]
 ["G", "G", "R"]
 ["G", "G", "G"]

2voto

Dan Getz Points 11818

Pour plus de variété, voici une ligne qui fait quelque chose de similaire :

getindex.("RG", collect.(Tuple.(CartesianIndices((2,2,2)))))

ou, pour les afficher également :

julia> println.(getindex.("RG", collect.(Tuple.(CartesianIndices((2,2,2))))));
RRR
GRR
RGR
GGR
RRG
GRG
RGG
GGG

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X