归一化矩阵的行,使得它们的范数是等于1(MATLAB)(Normalizing rows of ma

2019-09-02 17:33发布

我有如下问题-我有一个矩阵A大小16x22440的。

我需要做的是归一化该矩阵的每一行,以使得它们中的每的范数是等于1( for n=1:16 norm(A(n,:))==1

我怎样才能做到这一点在MATLAB?

编辑:在该矩阵中的每一行是一个160x140图像的创建的矢量,因此必须单独考虑。 该值需要进行标准化,以创建一个特征脸矩阵。

Answer 1:

请问您的MATLAB的安装包括神经网络工具箱? 如果是这样,那么尝试normr

nA = normr(A);

否则, @夏嘉曦的解决方案是,除了它不会处理无限还是不错NaN输入-这是更安全的事后检查未定义的规范情况:

nA = bsxfun(@rdivide,A,sqrt(sum(A.^2,2)));
nA(~isfinite(nA)) = 1; % Use 0 to match output of @Shai's solution, Matlab's norm()

注意零长度(所有零个组件)或无限长度载体(一种或多种组分的该正火+Inf-Inf )或一个具有NaN组件不是很好定义。 上述解决方案将返回所有的人,就像做Matlab的normr功能。 Matlab的norm功能,然而,表现出不同的行为。 您可能希望指定不同的行为,例如,警告或错误,全零,NaN的,由矢量长度等缩放组件此线程讨论这个问题的零长度向量在一定程度上: 你如何正常化零矢量? 。



Answer 2:

首先,计算标准(我这里假设Eucleadian规范)

n = sqrt( sum( A.^2, 2 ) );
% patch to overcome rows with zero norm
n( n == 0 ) = 1;
nA = bsxfun( @rdivide, A, n ); % divide by norm


文章来源: Normalizing rows of matrix, so that their norm is equal to 1 (MATLAB)