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

Matlab 如何按行合并或组合矩阵以形成新矩阵?,matlab,matrix,merge,concatenation,Matlab,Matrix,Merge,Concatenation,我有三个矩阵: 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

我有三个矩阵:

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:

如何执行此操作?

您可以使用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所提到的,这段代码效率不高,尤其是当数组变得非常大时。索引方法和预先验证变量是一种更好的方法。

您将得到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)
投入

B和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

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

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,:);

阅读为什么这不是一个好主意:第一个窍门起作用。第二,显示下标赋值维度不匹配错误。Idx不是矢量。@user9003011对不起,Idx的赋值有误。现在修好了。这是非常特殊的Ans。为了概括Ans,我想你可能会包括重塑。你是什么意思?
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
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,:);