我正在使用matlab处理我的项目,我需要组合两个这样的矩阵:
A和B是16 * 50矩阵
我的新矩阵C应如下:
C =
A(1,1) A(1,2) ... A(1,50)
B(1,1) B(1,2) ... B(1,50)
A(2,1) A(2,2) ... A(2,50)
B(2,1) B(2,2) ... B(2,50)
. . .
. . .
. . .
A(16,1) A(16,2) ... A(16,50)
B(16,2) B(16,2) ... B(16,50)
我该怎么做才能帮忙。谢谢。
答案 0 :(得分:5)
你首先应该阅读@woodchips的答案:了解MATLAB如何将数组存储在内存中非常重要。
无论如何,我会选择:
C = zeros(2,16,50);
C(1,:) = A(:);
C(2,:) = B(:);
C = reshape(C, 32, 50);
或
C = zeros(32,50);
C(1:2:end,:) = A;
C(2:2:end,:) = B;
由于这些方法避免重新排序元素。
答案 1 :(得分:4)
了解数组元素在内存中的位置,以及重塑,置换等工具如何对这些元素进行操作。
首先,您可以简单地将两个矩阵相互组合在一起吗? [A; B]当然就足够了。
如果您在结果上使用了重塑,会发生什么?所以像这样......
reshape([A;B],[16,2,50])
接下来,如果您申请置换,会发生什么?
permute(reshape([A;B],[16,2,50]),[2 1 3])
我们越来越近了吗?如果你对这个结果进行了重组怎么办? (是的,您可能希望在几个步骤中完成所有这些操作以使其可读。当您需要在下个月或明年进行调试时,可读代码非常重要。重要的是注释行,它们可以说明代码块的作用。 )
% interleave the rows of matrices A and B to create C
C = reshape([A;B],[16,2,50])
C = permute(C,[2 1 3]);
C = reshape(C,[32,50]);
重点是,学会使用matlab中的工具在内存中移动元素并记住目标。在你完成之前,不要忘记那些评论。轻松读取代码很容易调试代码。如果我建议的单行注释不适合您,那么添加更多行。评论几乎是免费的!它们只花了几秒钟的时间来编写,没有时间执行,但它们可以无法估量地改进你的代码。