【问题标题】:How can I divide each row of a matrix by a fixed row?如何将矩阵的每一行除以固定行?
【发布时间】:2011-06-11 01:31:50
【问题描述】:

假设我有一个像这样的矩阵:

100 200 300 400 500 600
  1   2   3   4   5   6
 10  20  30  40  50  60
...

我希望将每一行除以第二行(每个元素除以相应的元素),所以我会得到:

100 100 100 100 100 100
  1   1   1   1   1   1
 10  10  10  10  10  10
...

我该怎么做(不写显式循环)?

【问题讨论】:

标签: matlab loops matrix


【解决方案1】:

您现在可以使用array vs matrix operations

这样就可以了:

mat = [100 200 300 400 500 600
     1   2   3   4   5   6
     10  20  30  40  50  60];

result = mat ./ mat(2,:)

将输出:

result =

   100   100   100   100   100   100
     1     1     1     1     1     1
    10    10    10    10    10    10

这将从 R2016b 开始在 Octave 和 Matlab 中工作。

【讨论】:

    【解决方案2】:

    这里有几个等效的方法:

    M = [100 200 300 400 500 600
         1   2   3   4   5   6
         10  20  30  40  50  60];
    
    %# BSXFUN
    MM = bsxfun(@rdivide, M, M(2,:));
    
    %# REPMAT
    MM = M ./ repmat(M(2,:),size(M,1),1);
    
    %# repetition by multiplication
    MM = M ./ ( ones(size(M,1),1)*M(2,:) );
    
    %# FOR-loop
    MM = zeros(size(M));
    for i=1:size(M,1)
        MM(i,:) = M(i,:) ./ M(2,:);
    end
    

    最好的解决方案是使用 BSXFUN(@Itamar Katz 发布)

    【讨论】:

      【解决方案3】:

      使用bsxfun:

      outMat = bsxfun (@rdivide, inMat, inMat(2,:));
      

      bsxfun 的第一个参数是您要应用的函数的句柄,在本例中为右除法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-02
        • 2019-11-15
        • 2013-03-17
        • 1970-01-01
        • 2014-03-03
        相关资源
        最近更新 更多