有没有人知道是否有办法从1D数组生成2D数组,其中2D中的行是通过重复1D数组中的相应元素生成的。
即:
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|
答案 0 :(得分:9)
本着奖金答案的精神,以下是我自己的一些:
让A = (1:5)'
使用索引[比repmat更快]:
B = A(:, ones(5,1))
使用矩阵外部产品:
B = A*ones(1,5)
使用bsxfun()[不是最好的方法]
B = bsxfun(@plus, A, zeros(1,5))
%# or
B = bsxfun(@times, A, ones(1,5))
答案 1 :(得分:8)
您可以使用REPMAT功能执行此操作:
>> 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
编辑:奖励答案! ;)强>
对于您的示例,REPMAT是最直接的函数。但是,要注意的另一个很酷的功能是KRON,您也可以通过以下方式将其用作解决方案:
B = kron(A,ones(1,5));
对于小向量和矩阵KRON可能稍微更快,但对于更大的矩阵来说它会慢一些。
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以尝试以下方式:
a = [1 2 3 4 5]'
l = size(a)
for i=2:5
a(1:5, i) = a(1:5)
循环只是将列追加到最后。