我有一个数组
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
?
答案 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)
将是最安全的方式。