合并两个矩阵A和B,在matlab中首先从A中选择元素,从B中选择第二个元素

时间:2012-02-14 11:21:19

标签: matlab matrix

我正在使用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)

我该怎么做才能帮忙。谢谢。

2 个答案:

答案 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中的工具在内存中移动元素并记住目标。在你完成之前,不要忘记那些评论。轻松读取代码很容易调试代码。如果我建议的单行注释不适合您,那么添加更多行。评论几乎是免费的!它们只花了几秒钟的时间来编写,没有时间执行,但它们可以无法估量地改进你的代码。