Does anyone know if there is a way to produce a 2D array from a 1D array, where the rows in the 2D are generated by repeating the corresponding elements in the 1D array.
I.e.:
1D array 2D array
|1| |1 1 1 1 1|
|2| 开发者_C百科 |2 2 2 2 2|
|3| -> |3 3 3 3 3|
|4| |4 4 4 4 4|
|5| |5 5 5 5 5|
In the spirit of bonus answers, here are some of my own:
Let A = (1:5)'
Using indices [faster than repmat]:
B = A(:, ones(5,1))
Using matrix outer product:
B = A*ones(1,5)
Using bsxfun() [not the best way of doing it]
B = bsxfun(@plus, A, zeros(1,5)) %# or B = bsxfun(@times, A, ones(1,5))
You can do this using the REPMAT function:
>> A = (1:5).'
A =
1
2
3
4
5
>> B = repmat(A,1,5)
B =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
EDIT: BONUS ANSWER! ;)
For your example, REPMAT is the most straight-forward function to use. However, another cool function to be aware of is KRON, which you could also use as a solution in the following way:
B = kron(A,ones(1,5));
For small vectors and matrices KRON may be slightly faster, but it is quite a bit slower for larger matrices.
repmat(a, [1 n]), but you should also take a look at meshgrid.
You could try something like:
a = [1 2 3 4 5]'
l = size(a)
for i=2:5
a(1:5, i) = a(1:5)
The loop just keeps appending columns to the end.
精彩评论