2014-07-20 10 views
6

Sto cercando una funzione generale per affiancare o ripetere matrici lungo un numero arbitrario di dimensioni un numero arbitrario di volte. Python e Matlab hanno queste caratteristiche nelle tile di NumPy e nelle funzioni repmat di Matlab. La funzione repmat di Julia sembra supportare solo gli array bidimensionali.Affiancamento o ripetizione di matrici n-dimensionali in Julia

La funzione dovrebbe apparire come repmatnd (a, (n1, n2, ..., nk)). a è una matrice di dimensione arbitraria. E il secondo argomento è una tupla che specifica il numero di volte in cui la matrice viene ripetuta per ogni dimensione k.

Qualche idea su come affiancare un array Julia su più di 2 dimensioni? In Python userei np.tile e in matlab repmat, ma la funzione repmat in Julia supporta solo 2 dimensioni.

Per esempio,

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

comporterebbe:

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 

E per

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

comporterebbe la stessa cosa di prima. Immagino che gli sviluppatori Julia implementeranno qualcosa di simile nella libreria standard, ma fino ad allora sarebbe bello avere una soluzione.

+1

credo che la funzione di ripetizione può essere quello che stai cercando: http://docs.julialang.org/en/latest/stdlib/linalg/#Base.repeat. Scusa se continuo a rispondere con i commenti - non ho davvero il tempo/energia per scrivere risposte complete con esempi e tutto il jazz. – StefanKarpinski

risposta

6

Uso 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

Funziona alla grande. Mi chiedo perché c'è repmat e ripetere? – jtorca

+0

Perché 'repmat' era la funzione originale e quindi' repeat' è stata aggiunta in seguito. La ripetizione è anche più generale di "repmat" perché supporta le ripetizioni interne e le ripetizioni esterne. –