【问题标题】:Divide a matrix rowwise by its own sum将矩阵逐行除以其自己的总和
【发布时间】:2017-05-23 06:31:23
【问题描述】:

我有这个矩阵

K=
0 0 1
0 2 1
0 1 1

L= 
1
3
2

其中LK每一行的总和

我需要通过将K 的每一行除以其总和来创建一个新矩阵,例如从第二行[0 2 1] 我应该得到的输出是[0 2/3 1/3][0 0.67 0.33]

Output=
0   0     1
0   0.67  0,33
0   0.5   0.5 

我正在尝试使用此代码,但只有零:

for i=1:3;
    j=1:3;
    if K(i,j)>0
        K(i,j)=(K(i,j))/L(i)
    else
        K(i,j)=0
    end
end

如何将K 的每一行除以它自己的总和?

【问题讨论】:

    标签: matlab matrix row


    【解决方案1】:
    K=[0 0 1; 0 2 1; 0 1 1]; % your matrix
    rowSum = sum(K, 2); % compute the sum
    K_norm = K./repmat(rowSum, 1, size(K, 2));
    

    repmat 在这里构建一个与K 维度相同但每列是K 行的总和的矩阵。

    【讨论】:

      【解决方案2】:
      K=[0 0 1
      0 2 1
      0 1 1 ];
      L = sum(K,2) ;
      iwant = bsxfun(@rdivide,K,L)  ;
      

      【讨论】:

      • 再次,请详细说明答案给出解释,不要发布重复的答案,而只是扩展其中一个。
      【解决方案3】:

      你可以写成两行;首先计算总和,然后使用repmat 制作一个与K 大小相同的矩阵并按元素除

      L = sum(K,2);
      iwant = K./repmat(L,1,size(K,2));
      

      【讨论】:

        【解决方案4】:
        K=[0 0 1
        0 2 1
        0 1 1 ];
        L = sum(K,2) ;
        iwant = zeros(size(K)) ;
        for i = 1:size(K,1)
            iwant(i,:) = K(i,:)/L(i) ;
        end
        

        【讨论】:

        • 你试过这个代码吗?您至少需要元素操作。此外,请详细说明此答案并正确解释此代码的作用以及为什么它解决了 OP 的问题。
        • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
        猜你喜欢
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 1970-01-01
        相关资源
        最近更新 更多