问题标题:
【MATLAB如何定义矩阵拼接若有矩阵A=[1,2;3,4],B=[5,6;7,8].如何得到矩阵C=[A;B]即矩阵[1,2;3,4;5,6;7,8].(相当于把以上两个矩阵纵向拼接起来).有没有一个通用的算法,对于相同大小(m*n)的两个矩阵A,B,得】
问题描述:
MATLAB如何定义矩阵拼接
若有矩阵A=[1,2;3,4],B=[5,6;7,8].
如何得到矩阵C=[A;B]即矩阵[1,2;3,4;5,6;7,8].(相当于把以上两个矩阵纵向拼接起来).
有没有一个通用的算法,对于相同大小(m*n)的两个矩阵A,B,得到C=[A;B].
龚瑞昆回答:
没明白楼主还想要什么样的定义?
直接
C=[A;B]
不就行了?如果想写成函数的形式,那也有现成的:
C=cat(1,A,B)
范玉玲回答:
若A,B大小不一致怎么办呢?比如A(3*3),B(3*2).运行C=[A;B]的话会报错如下???Errorusing==>vertcatCATargumentsdimensionsarenotconsistent.有没有办法让大小不足的地方自动补充“0”元素呢?
龚瑞昆回答:
矩阵拼接是要求维数匹配的,你举的例子不符合拼接的条件。如果按照你所说的自动补零,需要自己编写函数。
参考函数代码如下:
function C = vcat_padding_0s(A, B)
[mA, nA] = size(A);
[mB, nB] = size(B);
C = zeros(mA+mB,max(nA,nB));
C(1:mA, 1:nA)=A;
C(1+mA:end, 1:nB)=B;
调用实例:
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> B=ones(2,4)
B =
1 1 1 1
1 1 1 1
>> C = vcat_padding_0s(A, B)
C =
8 1 6 0
3 5 7 0
4 9 2 0
1 1 1 1
1 1 1 1
>> B=ones(3,2)
B =
1 1
1 1
1 1
>> C = vcat_padding_0s(A, B)
C =
8 1 6
3 5 7
4 9 2
1 1 0
1 1 0
1 1 0
点击显示
其它推荐