如何对由 numpy 的 linalg.norm 方法规范化的值进行反规范化?

how to de-normalize values normalized by linalg.norm method of numpy?

我有一个数组

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

做相反的事情,真正简单的数学:

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

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

您基本上是按标量缩小整个数组。比例因子必须用于检索。该比例因子将是 np.linalg.norm(a),可以在计算归一化值时存储,然后用于检索 a,如 所示。另一种方法是将其中一个元素存储在原始数组 a 之外,比如第一个元素,然后将其与归一化数组中的相应元素进行除法运算并获得该比例因子。

因此,另一种方式是 -

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

同样,如果所选元素与规范化数组中的相应元素相比太小或太大,我们可能会有细微差异。所以,我猜这里使用 np.linalg.norm(a) 是最安全的方法。