可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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| |2 2 2 2 2| |3| -> |3 3 3 3 3| |4| |4 4 4 4 4| |5| |5 5 5 5 5|
回答1:
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))
回答2:
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.
回答3:
repmat(a, [1 n]), but you should also take a look at meshgrid.
回答4:
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.