如何对numpy的linalg.norm方法规范化的值进行去标准化?

时间:2017-04-28 08:46:56

标签: python numpy normalize

我有一个数组

a = array([[ 3.55679502,  3.46622505],
           [ 1.03670334,  2.43254031],
           [ 1.12185975,  3.25257322]])

现在我用numpys linalg.norm方法

对其进行了规范化
norm_a = a/np.linalg.norm(a)

它给出的归一化值在(0,1)范围内为

norm_a = array([[ 0.53930891,  0.52557599],
                [ 0.15719302,  0.36884067],
                [ 0.1701051 ,  0.49318044]])

现在,使用norm_a,如何恢复原始的非规范化矩阵a

2 个答案:

答案 0 :(得分:2)

确实做相反的简单数学:

In [310]:    
norm_a * np.linalg.norm(a)

Out[310]:
array([[ 3.55679502,  3.46622505],
       [ 1.03670334,  2.43254031],
       [ 1.12185975,  3.25257322]])

答案 1 :(得分:1)

你基本上用标量缩小整个数组。缩放因子必须用于检索。该缩放因子为np.linalg.norm(a),可以在计算规范化值时进行存储,然后用于检索a,如@EdChum's post所示。另一种方法是将一个元素存储在原始数组a之外,比如第一个元素,然后将它与分区对准规范化数组中的相应元素并获得该缩放因子。

因此,另一种方式是 -

a = norm_a*(a[0,0]/norm_a[0,0])

同样,如果所选元素与规范化数组中的相应元素相比太小或太大,我们可能会略有不同。所以,我猜测使用np.linalg.norm(a)将是最安全的方式。