【问题标题】:Matlab: How to multiply sub vectors of two larger vectors?Matlab:如何将两个较大向量的子向量相乘?
【发布时间】:2014-09-27 00:57:07
【问题描述】:

有没有什么好方法来做跟随。

我有 2 个向量,我只想进行子向量乘法。例如,

a = 1:6;  b = (1:6)'

那么我想要结果:

result = [1*1+2*2+3*3; 4*4+5*5+6*6] = [14; 77]

所以,我想将 3 个元素的每个子向量相乘。最后,向量result 的最后一个元素将是a*b 的总和或结果

提前感谢您的帮助

【问题讨论】:

    标签: matlab


    【解决方案1】:

    可以这样做

    sum(reshape(a,3,[]).*reshape(b,3,[])).'
    

    dot(reshape(a,3,[]),reshape(b,3,[])).'
    

    【讨论】:

    • 认为reshape(a,3,[]) 会更有意义,因为问题是"sub vectors of 3 element"
    • @Luis Mendo 和@Divakar:谢谢!这正是我想要的。这两个向量的大小是可变的,并且与子向量的大小相同。请注意,您是我在转置时看到.' 而不是' 的第一个:-)
    • '共轭 转置。关于.'',请参阅this very interesting Q&A
    • 我知道,但通常我只看到人们使用'。但是,如果使用 .' 可以提高性能,我不会这样做,因为 flops 是免费的 :-)
    【解决方案2】:

    也许我遗漏了一些东西,但不是那么简单:

    >> [a(1:3)*b(1:3) a(4:6)*b(4:6)]
    ans =
    
       14   77
    

    ??

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多