行标准化矩阵

Jee*_*Kim 4 matlab

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

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

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

dan*_*ain 7

假设您希望行总和为1:

bsxfun(@times, A, 1./(sum(A, 2)))
Run Code Online (Sandbox Code Playgroud)

编辑

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

bsxfun(@times, A, 1./sqrt(sum(A.^2, 2)))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以通过执行半优雅地处理零行和

bsxfun(@times, A, 1./(max(sum(A, 2), eps)))
Run Code Online (Sandbox Code Playgroud)