如何逐行合并或组合矩阵以形成新矩阵?

时间:2018-03-22 08:57:12

标签: matlab matrix merge concatenation

我有三个矩阵:

True

我想合并A = [1 2 3; 4 5 6; 7 8 9] B = [10 11 12; 13 14 15; 16 17 18; 19 20 21; 22 23 24; 25 26 27] C = [28 29 30; 31 32 33; 34 35 36; 37 38 39; 40 41 42; 43 44 45; 46 47 48; 49 50 51; 52 53 54] 中的一行,A中的两行,B中的三行来获取新的矩阵C

D

怎么做?

3 个答案:

答案 0 :(得分:3)

您最终会获得18行。您可以使用

找到每个矩阵的行
mod(1:18,6)

返回

[1   2   3   4   5   0   1   2   3   4   5   0   1   2   3   4   5   0]

因此,您希望A的行与上述向量中的1对应,B用于[2,3]C用于[4,5,0] }。

初始化零矩阵:

D = zeros(18,3)

放入A

D(mod(1:18,6)==1,:) = A

同样适用于BC

D(ismember(mod(1:18,6),[2,3]),:) = B
D(ismember(mod(1:18,6),[4,5,0]),:) = C

制作一些中间变量更简洁:

n = size([A;B;C],1) 
D = zeros(n,size(A,2))

idx = mod(1:n,6)
idx_A = idx==1
idx_B = ismember(idx,[2,3])
idx_C = ismember(idx,[4,5,0])

D(idx_A,:) = A
D(idx_B,:) = B
D(idx_C,:) = C

答案 1 :(得分:1)

您可以使用 for 循环和 vertcat 来执行您请求的内容。

D=[];
for aa = 1:length(A(:,1))
     D = vertcat(D,A(aa,:),B((aa*2-1):(aa*2),:),C((aa*3-2):(aa*3),:));
end


D =

 1     2     3
10    11    12
13    14    15
28    29    30
31    32    33
34    35    36
 4     5     6
16    17    18
19    20    21
37    38    39
40    41    42
43    44    45
 7     8     9
22    23    24
25    26    27
46    47    48
49    50    51
52    53    54

编辑:正如Sardar Usama所提到的,这个代码效率不高,尤其是当数组变得非常大时。索引方法和预先等分变量是一种更好的方法。

答案 2 :(得分:0)

要解决您的特定问题,请仅使用索引编制。

D=zeros(size([A;B;C],1),size(A,2)) % Intializing
D(1:6:end,:)=A; % We want 1rA, 2rB, 3rC, so row of A are in row 1, 7, etc
D(2:6:end,:)=B(1:2:end,:); % 1st row of B are in row 2, 8, etc
D(3:6:end,:)=B(2:2:end,:); % 2nd row of B are in row 3, 9, etc
D(4:6:end,:)=C(1:3:end,:); % etc
D(5:6:end,:)=C(2:3:end,:);
D(6:6:end,:)=C(3:3:end,:);