在Matlab中,为什么整个矩阵的L2范数的平方与行/列方L2的范数之和不匹配?

时间:2018-03-02 07:16:16

标签: matlab machine-learning precision norm

矩阵的L2范数的平方应与所有行/列的平方和L2-Norm匹配。 参考:http://mathworld.wolfram.com/L2-Norm.html

考虑在Matlab中使用随机(4,3)矩阵

Computed using a = rand(4,3)

0.0400    0.4357    0.9144
0.5551    0.9048    0.5755
0.1675    0.1772    0.3001
0.4189    0.0403    0.2407

整个矩阵的L2范数是:

norm(a1)^2 = 2.7806

列的平方和的L2范数:

norm(a1(:,1))^2 + norm(a1(:,2))^2 + norm(a1(:,3))^2 = 2.9337

行的平方和的L2范数:

norm(a1(1,:))^2 + norm(a1(2,:))^2 + norm(a1(3,:))^2 = 2.2214

在哪里,这匹配在Python(numpy):

a = np.random.rand(4,3)
array([[ 0.91033221,  0.9082118 ,  0.6864961 ],
   [ 0.15157616,  0.70232112,  0.06709103],
   [ 0.61008197,  0.15648347,  0.02693866],
   [ 0.53646277,  0.22186601,  0.77530143]])

整个矩阵的L2范数

numpy.linalg.norm(a)**2 = 3.9810836846898465

L2 Norm行的平方和:

numpy.linalg.norm(a[0])**2  + numpy.linalg.norm(a[1])**2  + 
numpy.linalg.norm(a[2])**2 + numpy.linalg.norm(a[3])**2 = 3.9810836846898465

Matlab是不是以更高的精度进行操作,积累了整个矩阵范数和行列的差异?

Matlab中是否有任何选项允许我正确地执行此操作?

1 个答案:

答案 0 :(得分:3)

Matlab使用与向量不同的矩阵范数。来自norm的Matlab文档:

  

n = norm(X)返回矩阵X的2范数或最大奇异值,大约为max(svd(X))。

因此,要获得与行和列式计算类似的结果,必须对矩阵进行矢量化。

M =[0.0400, 0.4357, 0.9144;
    0.5551, 0.9048, 0.5755;
    0.1675, 0.1772, 0.3001;
    0.4189, 0.0403, 0.2407 ];

norms = [];
norms(end+1) = norm(M)^2;    % 2.46
norms(end+1) = norm(M(:))^2; % 2.87
norms(end+1) = norm(M(1,:))^2 + norm(M(2,:))^2 + norm(M(3,:))^2 + norm(M(4,:))^2; % 2.87
norms(end+1) = norm(M(:,1))^2 + norm(M(:,2))^2 + norm(M(:,3))^2; % 2.87

norms