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