使用内置函数,是否有任何有效的(计算速度+击键量)方法在MATLAB中执行行规范化?
这是我到目前为止所提出的
A = rand(m, n); % m rows, n cols
v = pdist2(zeros(1, size(A, 2)), A);
normA = diag(1./v) * A;
答案 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)))