如何重复

A = [ 1 2 ;
      3 4 ]


被重复

B = [ 1 2 ;
      2 1 ]


所以我想要像矩阵C这样的答案:

C = [ 1 2 2;
      3 3 4 ]


谢谢你的帮助。

最佳答案

为简单起见,我假设您将只添加更多的列,并且已检查每行的列数是否相同。

然后,它变成重复元素和重塑的简单组合。

编辑我已经修改了代码,以便如果A和B是3D数组也可以使用。

%# get the number of rows from A, transpose both
%# A and B so that linear indexing works
[nRowsA,~,nValsA] = size(A);
A = permute(A,[2 1 3]);
B = permute(B,[2 1 3]);

%# create an index vector from B
%# so that we know what to repeat
nRep = sum(B(:));

repIdx = zeros(1,nRep);
repIdxIdx = cumsum([1 B(1:end-1)]);
repIdx(repIdxIdx) = 1;
repIdx = cumsum(repIdx);

%# assemble the array C
C = A(repIdx);
C = permute(reshape(C,[],nRowsA,nValsA),[2 1 3]);

C =
     1     2     2
     3     3     4

关于matlab - 如何在matlab中重复元素矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11505410/

10-12 18:08