【问题标题】:Matlab: add vector to matrixMatlab:将向量添加到矩阵
【发布时间】:2011-09-22 14:25:02
【问题描述】:

我有一个 3XN 矩阵,表示 3D 坐标列表,类似于

33    33    33    33    34    34    34    34    34    35    35
17    18    19    20    16    17    18    19    20    16    17
10    10    10    10    10    10    10    10    10    10    10 

我想将所有坐标移动某个向量v=[1 2 3],即将 3D 向量添加到矩阵的每一列。

我知道如何使用for 循环来做到这一点,但是没有循环我怎么能做到呢?肯定有办法……

【问题讨论】:

    标签: matlab vector matrix addition


    【解决方案1】:

    你的意思是这样的?

    D=[33    33    33    33    34    34    34    34    34    35    35;
    17    18    19    20    16    17    18    19    20    16    17;
    10    10    10    10    10    10    10    10    10    10    10 ];
    
    A=[1 2 3]';
    
    C= bsxfun(@plus, D, A)
    
    C =
    
        34    34    34    34    35    35    35    35    35    36    36
        19    20    21    22    18    19    20    21    22    18    19
        13    13    13    13    13    13    13    13    13    13    13
    

    【讨论】:

      【解决方案2】:

      使用repmat:

      M = randn(3, N);           % your 3 x N matrix
      v = randn(3, 1);           % your vector
      r = M + repmat(v, [1 N]);  % add v to every column of M
      

      【讨论】:

      • 我认为 Nasser 的答案更好——我认为在这里你从v 创建第二个矩阵,如果N 非常大,这将占用大量空间,而他不占用增加任何额外的空间。我错过了什么吗?
      • 不,你可能是对的。我偏爱我的解决方案,因为我已经使用了很多次 :) 除非 N 非常大,您的计算机非常慢,或者您重复此操作非常多次,否则性能差异可能可以忽略不计。如果性能不是问题,那么我觉得使用 repmat 可能会导致代码更具可读性和可维护性。但这只是一种意见。两种解决方案都有效:)
      • 值得注意的是repmat 非常慢,如果N 很大,那么您的解决方案可能会使用更多内存。此外,bsxfun 可以更好地处理任何可用的多线程,例如通过 PCT。
      猜你喜欢
      • 1970-01-01
      • 2014-07-06
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2014-01-02
      • 2021-12-04
      相关资源
      最近更新 更多