我有三个矩阵:
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
怎么做?
答案 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
同样适用于B
和C
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,:);