行标准化矩阵

时间:2011-12-12 00:38:23

标签: matlab

使用内置函数,是否有任何有效的(计算速度+击键量)方法在MATLAB中执行行规范化?

这是我到目前为止所提出的

A = rand(m, n); % m rows, n cols
v = pdist2(zeros(1, size(A, 2)), A);
normA = diag(1./v) * A;

1 个答案:

答案 0 :(得分:7)

假设您希望行总和为1:

bsxfun(@times, A, 1./(sum(A, 2)))

修改

如果您正在寻找下面的@Oli建议的l2规范,那么

bsxfun(@times, A, 1./sqrt(sum(A.^2, 2)))

在这种情况下,您可以通过执行

半优雅地处理零行和
bsxfun(@times, A, 1./(max(sum(A, 2), eps)))