如何乘以不同大小的矩阵(不知道它们的确切大小)?

How to multiply matrix having different size (without knowing exactly the size they will have)?

我必须将 2 个大小不同的矩阵相乘(标量乘法)。例如,第一个的大小为 n-by-m,第二个的大小为 n+1-by -m+1。事实并非总是如此。我的意思是,有时第一个的大小为 n+1-by-m+1 而第二个的大小为 n-by-mn+2-by-m+2 等等...

示例:

a = [ 1 2 3; 
      4 5 6]; 

b = [ 1 2 3; 
      4 5 6; 
      7 8 9]

我希望 Matlab 检查每个矩阵的大小,然后使用 2 之间可用的最小大小将它们相乘,即忽略较大矩阵的最后一行和最后一列(或者类似地,添加 [= 的行和列13=] 到较小的矩阵)。

通过示例输入我想获得:

c = [1  4  9; 
     16 25 36] 

c = [1  4  9; 
     16 25 36; 
     0  0  0]

这个怎么写?

求出最终矩阵的行数和列数:

n = min(size(a,1), size(b,1));
m = min(size(a,2), size(b,2));

然后仅提取 ab 的相关部分(使用 : 运算符)用于乘法:

c = a(1:n,1:m).*b(1:n,1:m)

如果只考虑点积,意味着size(a)必须等于size(b),这样可以简单地限制b的大小,如果喜欢可以用简单的if语句。例如:

if all(size(b) == size(a))
   answer = a.*b
else 
   minsize(:,1) = min(size(a,1),size(b,1));
   minsize(:,2) = min(size(a,2),size(b,2));
   answer = a(1:minsize(:,1),1:minsize(:,2)).*a(1:minsize(:,1),1:minsize(:,2));
end

我认为这不是最简单的方法,但它很容易理解:)

我总是不确定哪个矩阵更大,然后我想使用:

if size (a) > size (b)
   a = a(1:size(b,1),1:size(b,2));
elseif size (a) < size (b)
   b = b (1: size (a,1),1:size(a,2));
end

好像是这样的