MATLAB添加不同尺寸的矩阵

时间:2013-07-15 12:53:51

标签: matlab matrix

我在添加两个不同大小的数组时遇到了问题。当我在这个网站上进行一些探索时,似乎大多数问题涉及具有不同大小的向量,而不是行和列中具有多个维度的实际矩阵。

我知道添加不同尺寸的矩阵在数学上“没有意义”。它只是我用来使代码工作更轻松的工具,但问题就在这里:

A = magic(4);
B = magic(3);
C = A + B

这基本上就是我想要做的。我只想让B在第4行和第4列有零,然后我可以有相同的尺寸并添加它们。但是我该怎么办呢?在此先感谢=)

编辑:另外,特别是我想以某种方式将B添加到A中,因此A中的原始3x3基本上“移过”1列但保持在同一行。

3 个答案:

答案 0 :(得分:3)

在添加A和B之前用零填充数组B. 使用“padarray”功能

答案 1 :(得分:3)

请注意,padarray需要安装图像处理工具箱。

涉及填充的本机解决方案如下所示:

C = B;
C(end + 1:size(A, 1), end + 1:size(A, 1)) = 0;
C = C + A;

这假定矩阵A的维度大于B,但如果没有,则可以轻松修改此代码。

填充的替代方法是将矩阵B添加到A中的相应元素。这可以通过很多方式实现,例如:

C = zeros(max(size(A), size(B)));  %// Preallocate matrix to accommodate result
C(1:size(A, 1), 1:size(A, 2)) = A;
C(1:size(B, 1), 1:size(B, 2)) = C(1:size(B, 1), 1:size(B, 2)) + B;

此具体示例计算矩阵ABC元素的索引,并对重叠元素求和。

答案 2 :(得分:1)

假设A可以被破坏性地重复使用,您也可以通过直接索引到A来完成它。这样可以保存依赖关系(padarray)并将内存复杂度降低到O(N)(而不是O(N²)padarray或手动填充:

idx = {1:size(B,1), 1:size(B,2)};
A(idx{:}) = A(idx{:}) + B;

或者,对于任意形状的矩阵,

A(1:size(B,1),1:size(B,2),2) = B;
sum(A,3)

但我建议你非常小心这一切,并且最多使用谨慎。事实上它本身不可能实际上是一个保护来防止创建错误。矩阵的维数具有数学意义;试图通过其中一个标准操作自动调整大小打破数学规则,这通常是对于错误的肥沃布局。