8

Is there a matlab function which allows me to do the following operation?

x = [1 2 2 3];

and then based on x I want to build the matrix m = [1 2 2 3; 1 2 2 3; 1 2 2 3; 1 2 2 3]

Cris Luengo
  • 55,762
  • 10
  • 62
  • 120
Simon
  • 4,999
  • 21
  • 69
  • 97

2 Answers2

12

You are looking for the REPMAT function:

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

You can also use indexing to repeat the rows:

m = x(ones(4,1),:);

or even outer-product:

m = ones(4,1)*x;

and also using BSXFUN:

m = bsxfun(@times, x, ones(4,1))
Amro
  • 123,847
  • 25
  • 243
  • 454
0

You could try using vertcat, like this:

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

Or even simply:

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

EDIT:

for multiples of x, you can do:

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

EDIT2:

For an arbitrary number of x's in m...

n = 3; % number of repetitions...
x = [1 2 2 3];
m = [];
for i=1:n
    m = [m;x];
end
Richard Inglis
  • 5,888
  • 2
  • 33
  • 37
  • the problem is that I want to pass an argument with the number of multiples. I want to do this inside a for loop and the number of times to concatenate the raw vectors is undetermined. – Simon Jul 31 '11 at 12:18
  • Ah, you didn't mention that in your question... (I've edited my answer) – Richard Inglis Jul 31 '11 at 12:20