【问题标题】:How to multiply matrix having different size (without knowing exactly the size they will have)?如何将具有不同大小的矩阵相乘(不确切知道它们将具有的大小)?
【发布时间】:2015-06-25 13:28:19
【问题描述】:

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

例子:

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

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

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

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

c = [1  4  9; 
     16 25 36] 

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

我该怎么写?

【问题讨论】:

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


    【解决方案1】:

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

    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)
    

    【讨论】:

      【解决方案2】:

      如果只考虑点积,则表示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?当ab 具有相同的大小时,这不会中断。另外,我认为这是最简单的方法。另外你为什么要做minsize(:,1)等而不是minsize(1)
      • 其实我看错了问题,以为是矩阵积(而不是点积),所以我开始写,发现我走错了路。所以我想我不妨用 if 来表明我对这个问题的理解。绝对不需要。
      【解决方案3】:

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

      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
      

      它似乎是这样工作的。

      【讨论】:

      • 这假设一个矩阵在两个列和行中都将大于另一个矩阵。但是an-by-mbn-1-by-m+1 ?此处提供的其他解决方案更通用,它们不会更改您原来的 ab 以找到正确的 c
      • 我同意 Dan 的解决方案,它普遍正确且简单。我的方法本质上是一样的,但是需要更多的时间来计算。
      • 我同意,您的两种解决方案都更好,因为它们不会改变原始的 a 和 b。丹,一个小规范:在您的解决方案中,m 的暗淡应该是 2 而不是 1,因为它是指列(是的,2 矩阵可以在行和列中发生变化)
      猜你喜欢
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-02
      • 2021-06-23
      相关资源
      最近更新 更多