How can I divide each row of a matrix by a fixed row?

前端 未结 3 1296
隐瞒了意图╮
隐瞒了意图╮ 2020-11-30 10:06

Suppose I have a matrix like:

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

I wish to divide each row by the

相关标签:
3条回答
  • 2020-11-30 10:22

    Here's a couple more equivalent ways:

    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
    

    The best solution is the one using BSXFUN (as posted by @Itamar Katz)

    0 讨论(0)
  • 2020-11-30 10:22

    You can now use array vs matrix operations.

    This will do the trick :

    mat = [100 200 300 400 500 600
         1   2   3   4   5   6
         10  20  30  40  50  60];
    
    result = mat ./ mat(2,:)
    

    which will output :

    result =
    
       100   100   100   100   100   100
         1     1     1     1     1     1
        10    10    10    10    10    10
    

    This will work in Octave and Matlab since R2016b.

    0 讨论(0)
  • 2020-11-30 10:23

    Use bsxfun:

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

    The 1st argument to bsxfun is a handle to the function you want to apply, in this case right-division.

    0 讨论(0)
提交回复
热议问题