2014-07-20 1 views
6

Я ищу общую функцию для чередования или повторения матриц вдоль произвольного количества измерений произвольным числом раз. Python и Matlab имеют эти особенности в плитке NumPy и функции repmat Matlab. Функция repmat от Julia, похоже, поддерживает до 2-мерных массивов.Плитка или повторение n-мерных массивов в Julia

Функция должна выглядеть как repmatnd (a, (n1, n2, ..., nk)). a - массив произвольной размерности. Второй аргумент - это кортеж, определяющий количество повторений массива для каждого измерения k.

Любая идея, как нарисовать массив Юлии на более чем 2-х измерениях? В Python я бы использовал np.tile и в matlab repmat, но функция repmat в Julia поддерживает только 2 измерения.

Например,

x = [1 2 3] 
repmatnd(x, 3, 1, 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 
1 2 3 

И

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

приведет то же самое, как и раньше. Я предполагаю, что разработчики Julia будут реализовывать что-то подобное в стандартной библиотеке, но до тех пор было бы неплохо иметь исправление.

+1

Я считаю, что функция повтора может быть то, что вы ищете: http://docs.julialang.org/en/latest/stdlib/linalg/#Base.repeat. Извините, что я продолжаю отвечать комментариями - на самом деле нет времени/энергии, чтобы писать полные ответы с примерами и всем этим джазом. – StefanKarpinski

ответ

6

Использование 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

Отлично работает. Интересно, почему есть рематт и повторение? – jtorca

+0

Потому что 'repmat' была оригинальной функцией, а затем' repeat' была добавлена ​​позже. Повтор также более общий, чем 'repmat', потому что он поддерживает внутренние повторения, а также внешние повторения. –