如何将具有不同大小的矩阵相乘(不知道它们具有的大小)?

时间:2015-06-25 13:28:20

标签: matlab matrix multidimensional-array matrix-multiplication multiplication

我必须乘以具有不同大小的2个矩阵(标量乘法)。例如,第一个的大小 n -by- m ,第二个 n + 1 -by- m + 1 。事实是情况并非总是如此。我的意思是,有时第一个的大小 n + 1 -by- m + 1 而第二个 n -by- m < / em>或 n + 2 -by- m + 2 等......

示例:

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

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

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

通过示例输入,我想获得:

0

c = [1  4  9; 
     16 25 36] 

我怎么写这个?

3 个答案:

答案 0 :(得分:4)

查找最终矩阵的行数和列数:

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)

答案 1 :(得分:1)

如果您只考虑点积,则意味着大小(a)必须等于大小(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

我不认为这是最简单的方法,但理解起来很简单:)

答案 2 :(得分:0)

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

    const JPG = "image/jpeg";
    module.exports = {
          JPG: JPG
    }

这似乎是这样的。