2011-07-31 30 views

Trả lời

12

Bạn đang tìm kiếm REPMAT chức năng:

x = [1 2 2 3]; 
m = repmat(x,4,1); 

Bạn cũng có thể sử dụng lập chỉ mục để lặp lại các hàng:

.210

hoặc thậm chí bên ngoài sản phẩm:

m = ones(4,1)*x; 

và cũng sử dụng BSXFUN:

m = bsxfun(@times, x, ones(4,1)) 
+0

và nếu tôi muốn để xây dựng 'm = [1 2 2 3; 2 4 4 6; 3 6 6 9] '? – Simon

+2

sử dụng giải pháp BSXFUN: 'm = bsxfun (@times, x, (1: 3) ')' – Amro

+0

Nếu tôi nhớ chính xác, việc sử dụng lập chỉ mục nhanh hơn sử dụng repmat. Nhưng cũng ít dễ đọc hơn. – MarkV

0

Bạn có thể thử sử dụng vertcat, như thế này:

x = [1 2 2 3]; 
m = vertcat(x,x,x,x); 

Hoặc thậm chí chỉ đơn giản là:

x = [1 2 2 3]; 
m = [x;x;x;x]; 

EDIT:

cho bội số của x, bạn có thể làm:

x = [1 2 2 3]; 
m = [x;2*x;3*x]; % [1 2 2 3; 2 4 4 6; 3 6 6 9] 

EDIT2:

Đối với một số tùy ý của của x trong m ...

n = 3; % number of repetitions... 
x = [1 2 2 3]; 
m = []; 
for i=1:n 
    m = [m;x]; 
end 
+0

vấn đề là tôi muốn vượt qua một đối số với số lượng bội số. Tôi muốn làm điều này bên trong một vòng lặp for và số lần ghép các vectơ thô chưa được xác định. – Simon

+0

Ah, bạn không đề cập đến điều đó trong câu hỏi của bạn ... (Tôi đã chỉnh sửa câu trả lời của mình) –

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