【问题标题】:how to de-normalize values normalized by linalg.norm method of numpy?如何对 numpy 的 linalg.norm 方法规范化的值进行反规范化?
【发布时间】:2017-09-26 07:39:19
【问题描述】:

我有一个数组

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

【问题讨论】:

    标签: python numpy normalize


    【解决方案1】:

    做相反的简单数学:

    In [310]:    
    norm_a * np.linalg.norm(a)
    
    Out[310]:
    array([[ 3.55679502,  3.46622505],
           [ 1.03670334,  2.43254031],
           [ 1.12185975,  3.25257322]])
    

    【讨论】:

    • a 不是未知的,因为这就是我们想要找回的东西吗?
    • @Divakar 我假设由于 OP 已经标准化 a 他们仍然有 a
    • @Divakar 说我明白你的意思,会思考和更新
    • 我猜我们假设 OP 已经预先存储了该标量 np.linalg.norm(a)
    • 在任何情况下,“非规范化”数组可能会略有不同——因为没有(不是每个)浮点运算都是双射的,所以可能会有轻微的错误。
    【解决方案2】:

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

    因此,另一种方式是 -

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 2013-03-08
      • 2020-04-07
      • 2021-02-16
      • 2016-05-17
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      相关资源
      最近更新 更多