在matlab中将矢量重新排序为另一个重复的矢量

时间:2014-07-02 09:52:08

标签: matlab

我有一个形式的矢量:

A = [a1 a2 a3 a4 ...];

我想创建另一个这样的矢量:

B = [a1 a1 a1 a2 a2 a2 a3 a3 a3 a4 a4 a4 ...];

我该怎么做?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点,例如使用Kronecker tensor product这样:

B = kron(A,ones(1,3))

或合并reshaperepmat,如下所示:

B = reshape(repmat(A,3,1),1,[])

如果您不确定矢量是水平还是垂直,您可以使用(:)和转置.',如下所示:

B = kron(A(:).', ones(1,3))
B = reshape(repmat(A(:).',3,1),1,[])

修改

你说重塑版本没有用。以下是我的测试结果:

A = 1:4
B = reshape(repmat(A(:).',3,1),1,[])
B =
   1   1   1   2   2   2   3   3   3   4   4   4
A = (1:4)'
B = reshape(repmat(A(:).',3,1),1,[])
B =
   1   1   1   2   2   2   3   3   3   4   4   4

因此,它适用于列和行向量(至少对我而言)。

更多方法:

%# vector-matrix product
reshape(ones(3,1)*A, 1,[])

%# reorganize simple concatenation
nA = 3*numel(A);    
B([1:3:nA 2:3:nA 3:3:nA]) = [A A A];