使用内置函数,是否有任何有效的(计算速度+击键量)方法在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)
假设您希望行总和为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)