【问题标题】:Substracting matrix terms [duplicate]减去矩阵项[重复]
【发布时间】:2013-11-08 05:30:49
【问题描述】:

在 matlab 上: 我有一个向量 P。 我想将值 P(k+1) - P(k) 存储在一个新的向量 M 中。我可以使用 for 循环来做到这一点,但是有没有更有效的方法(我有一个巨大的向量)。

【问题讨论】:

  • for 循环几乎和其他任何方法一样有效,因为在后台任何其他方法都必须是类似的构造。
  • 你可以使用diff
  • @PaulDraper 有一个内置函数diff,我想它会更快,因为它可能是在c 而不是Matlab 中编写和优化的。但我可能是错的。它当然更具可读性。
  • @PaulDraper - 在 MATLABland 中,这与传统智慧大相径庭,轻轻地说。对于同一任务,for 循环很少能胜过适当的矢量化或内置函数。
  • @bdecaf - 具有讽刺意味的是,我在 SO 上多次提出您的相同观点,但 JIT 加速器是不可预测的,并且通常仍然不如等效的矢量化操作。我在上面发表评论是因为即使有了这些改进,第一个想法仍然不应该是“for 循环将几乎与其他任何循环一样有效”。这是一个相当的误导性陈述。请注意,我并没有说 for 循环不好,因为正如您所指出的那样,它们不再存在。不可否认,这种思维方式似乎正在走恐龙的道路,这很适合我。 :)

标签: matlab


【解决方案1】:

正如 Marcin 所说,使用 diff。对于一维向量,diff(a)。对于昏暗 1 的差异,diff(a,[],1)。沿着 dim 2,使用 diff(a,[],2)

【讨论】:

    【解决方案2】:

    简单的解决方案

    Difference = V(2:n) - V(1:n-1) 其中 n 是向量 V 的大小;

    n = 尺寸(V,1);

    【讨论】:

      【解决方案3】:

      我认为制作矢量 P 可能更容易,然后复制它并稍微移动它。如果你制作向量 Pk(你的常规 P 向量,但在上面填充)然后制作 Pk+1(我们称之为 Pkp1)并在下面填充。

      Pk   = [0 P];
      Pkp1 = [P 0];
      M    = Pkp1 - Pk
      

      这使它成为一个元素矩阵运算,它总是比循环更快。如果您的递归算法需要,您可以更改为 0 填充。

      我希望这对您有所帮助。 马丁

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多