2014-07-20 2 views
6

Je cherche une fonction générale pour paver ou répéter des matrices le long d'un nombre arbitraire de dimensions un nombre arbitraire de fois. Python et Matlab ont ces fonctions dans la mosaïque NumPy et les fonctions repmat de Matlab. La fonction repmat de Julia ne semble supporter que des tableaux bidimensionnels.Carrelage ou répétition de tableaux n-dimensionnels dans Julia

La fonction doit ressembler à repmatnd (a, (n1, n2, ..., nk)). a est un tableau de dimension arbitraire. Et le deuxième argument est un tuple spécifiant le nombre de fois que le tableau est répété pour chaque dimension k.

Une idée de la façon de mosaïquer un tableau Julia sur plus de 2 dimensions? En Python j'utiliserais np.tile et dans matlab repmat, mais la fonction repmat dans Julia ne supporte que 2 dimensions.

Par exemple,

x = [1 2 3] 
repmatnd(x, 3, 1, 3) 

se traduirait par:

1 2 3 
1 2 3 
1 2 3 

1 2 3 
1 2 3 
1 2 3 

1 2 3 
1 2 3 
1 2 3 

Et pour

x = [1 2 3; 1 2 3; 1 2 3] 
repmatnd(x, (1, 1, 3)) 

entraînerait la même chose qu'avant. J'imagine que les développeurs de Julia vont mettre en œuvre quelque chose comme ça dans la bibliothèque standard, mais jusque-là, ce serait bien d'avoir un correctif.

+1

Je crois que la fonction de répétition peut être ce que vous cherchez: http://docs.julialang.org/en/latest/stdlib/linalg/#Base.repeat. Désolé je continue à répondre avec des commentaires - n'ont pas vraiment le temps/énergie d'écrire des réponses complètes avec des exemples et tout ce jazz. – StefanKarpinski

Répondre

6

Utilisation repeat:

julia> X = [1 2 3] 
1x3 Array{Int64,2}: 
1 2 3 

julia> repeat(X, outer = [3, 1, 3]) 
3x3x3 Array{Int64,3}: 
[:, :, 1] = 
1 2 3 
1 2 3 
1 2 3 

[:, :, 2] = 
1 2 3 
1 2 3 
1 2 3 

[:, :, 3] = 
1 2 3 
1 2 3 
1 2 3 
+1

Fonctionne très bien. Je me demande pourquoi il y a repmat et répéter? – jtorca

+0

Parce que 'repmat' était la fonction d'origine et que' repeat' a été ajouté plus tard. La répétition est aussi plus générale que 'repmat' car elle supporte aussi bien les répétitions internes que les répétitions externes. –