【问题标题】:From matrix column subtract corresponding vector value从矩阵列中减去相应的向量值
【发布时间】:2012-09-22 20:15:52
【问题描述】:

我有一个矩阵'x'和一个行向量'v';行向量中的元素数与矩阵中的列数相同。是否有任何预定义的函数可以执行以下操作?

for c = 1 : columns(x)
    for r = 1 : rows(x)
        x(r, c) -= v(c);
    end
end

【问题讨论】:

    标签: matlab matrix octave


    【解决方案1】:
    bsxfun(@minus,x,v)
    

    这是一个八度的演示:

    octave>  x = [1 2 3;2 3 4]
    x =
    
       1   2   3
       2   3   4
    
    octave> v = [2 0 1]
    v =
    
       2   0   1
    
    octave> 
    octave> z=bsxfun(@minus,x,v)
    z =
    
      -1   2   2
       0   3   3
    

    【讨论】:

    • 已编辑:误读行向量的维度。这现在与问题相符。
    • 嗨!你知道吗,在 3.6.0 版本中,Octave 引入了自动广播,所以你不必再使用 bsxfun 了吗?
    • @carandraug 我不知道……很酷。我通常使用 MATLAB,除非我远离需要在线 octave 实用程序的计算机。
    【解决方案2】:

    或者,您可以复制您的向量并直接从矩阵中减去它

    z = x-repmat(v, size(x, 1), 1);
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 Octave 3.6.0 或更高版本,则不必使用 bsxfun,因为 Octave 会自动执行 broadcasting(请注意,这与实际使用 bsxfun 相同,只是更直观)。例如:

      octave>  x = [1 2 3; 2 3 4]
      x =
      
         1   2   3
         2   3   4
      
      octave> v = [2 0 1]
      v =
      
         2   0   1
      
      octave> z = x - v
      z =
      
        -1   2   2
         0   3   3
      

      【讨论】:

        猜你喜欢
        • 2014-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-02
        • 2019-04-17
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        相关资源
        最近更新 更多