登录论坛

查看完整版本 : 如何在MATLAB中按列总和划分矩阵元素?


poster
2019-12-10, 16:49
是否有一种简单的方法将每个矩阵元素除以列总和?例如:

input: 1 4 4 10 output: 1/5 4/14 4/5 10/14
回答:
以下是执行此操作的不同方法的列表...


...使用bsxfun (https://www.mathworks.com/help/matlab/ref/bsxfun.html) :

B = bsxfun(@rdivide,A,sum(A));
...使用repmat (https://www.mathworks.com/help/matlab/ref/repmat.html) :

B = A./repmat(sum(A),size(A,1),1);
...使用外部产品 (http://en.wikipedia.org/wiki/Outer_product) (如Amro (https://stackoverflow.com/users/97160/amro)建议):

B = A./(ones(size(A,1),1)*sum(A));
...并使用for循环(如mtrw (https://stackoverflow.com/users/120261/mtrw)所建议):

B = A; columnSums = sum(B); for i = 1:numel(columnSums) B(:,i) = B(:,i)./columnSums(i); end
更新:

从MATLAB R2016b及更高版本开始,大多数内置二进制函数(可在此处 (https://www.mathworks.com/help/matlab/ref/bsxfun.html#inputarg_fun)找到列表)支持隐式扩展,这意味着它们默认情况下具有bsxfun (https://www.mathworks.com/help/matlab/ref/bsxfun.html)的行为。因此,在最新的MATLAB版本中,您要做的就是:

B = A./sum(A);

更多&回答... (https://stackoverflow.com/questions/1773099)