如何在MATLAB中将矩阵元素除以*非零*列和?

时间:2016-11-01 17:25:31

标签: matlab matrix column-sum

我看到了这个问题:How do I divide matrix elements by column sums in MATLAB?

但另外,我只想在列总和(sum(A))非零时才进行除法。
是否有任何列出的方法可用,除了循环方法,因为它的矩阵大小非常慢?

1 个答案:

答案 0 :(得分:1)

您只需要通过中间步骤从sum(A)删除零元素:

col_sum = sum(A);
col_sum( col_sum == 0 ) = 1; % no zeros

现在,您可以使用the linked post中的任何方法,例如使用bsxfun

B = bsxfun(@rdivide, A, col_sum);    

从数值的角度来看,当A是浮点类型时,仅消除完全零的元素,这不是一个很好的做法。相反,您可能希望消除所有接近零元素:

col_sum( abs(col_sum) < 1e-10 ) = 1;