2014-07-20 21 views
6

Tôi đang tìm một hàm tổng quát để xếp hoặc lặp lại các ma trận theo một số thứ tự tùy ý một số lần tùy ý. Python và Matlab có các tính năng này trong ngói của NumPy và các chức năng của Matlab. Chức năng repmat của Julia dường như chỉ hỗ trợ lên đến mảng 2 chiều.Tiling hoặc lặp lại các mảng n chiều trong Julia

Hàm sẽ trông giống như repmatnd (a, (n1, n2, ..., nk)). a là một mảng thứ nguyên tùy ý. Và đối số thứ hai là một tuple xác định số lần mảng được lặp lại cho mỗi thứ nguyên k.

Bất kỳ ý tưởng nào về cách vẽ một mảng Julia trên lớn hơn 2 thứ nguyên? Trong Python tôi sẽ sử dụng np.tile và trong MATLAB MATLAB, nhưng hàm repmat trong Julia chỉ hỗ trợ 2 chiều.

Ví dụ,

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

sẽ dẫn đến:

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 

Và đối với

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

sẽ cho kết quả trong điều tương tự như trước đây. Tôi tưởng tượng các nhà phát triển Julia sẽ thực hiện một cái gì đó như thế này trong thư viện chuẩn, nhưng cho đến lúc đó, nó sẽ là tốt đẹp để có một sửa chữa.

+1

tôi tin rằng các chức năng lặp lại có thể là những gì bạn đang tìm kiếm: http://docs.julialang.org/en/latest/stdlib/linalg/#Base.repeat. Xin lỗi, tôi tiếp tục trả lời với các nhận xét - không thực sự có thời gian/năng lượng để viết câu trả lời đầy đủ với các ví dụ và tất cả nhạc jazz đó. – StefanKarpinski

Trả lời

6

Sử dụng 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

Hoạt động tuyệt vời. Tôi tự hỏi tại sao có repmat và lặp lại? – jtorca

+0

Vì 'repmat' là hàm gốc và sau đó' lặp lại' được thêm vào sau. Lặp lại cũng tổng quát hơn 'repmat' vì nó hỗ trợ lặp lại bên trong cũng như lặp lại bên ngoài. –

Các vấn đề liên quan