如何还原经Power、Reciprocal、Box-Cox等变换后的NumPy数组原始值?
NumPy数组变换的还原方法咨询
我对NumPy数组执行了log、reciprocal、boxcox、sqrt等多种变换,代码如下:
import numpy as np y_t = np.log(y) y_t1 = np.sqrt(y) y_t2 = np.reciprocal(y) y_t3 = np.power(y,0.1) ......
我已掌握log和sqrt变换的还原方法:
y_t_orig = np.exp(y_t) y_t1_orig = np.square(y_t1)
请问如何还原Power、Reciprocal、Box-Cox等其他变换后的原始值?
各变换的还原方法
1. Reciprocal(倒数)变换还原
倒数变换本质是 y_t2 = 1/y,直接对变换后的值再次取倒数即可还原原始值:
y_t2_orig = np.reciprocal(y_t2) # 等价写法 y_t2_orig = 1 / y_t2
2. Power(幂)变换还原
幂变换公式为 y_t3 = y^k(示例中k=0.1),还原时需对变换后的值取 1/k 次幂:
k = 0.1 y_t3_orig = np.power(y_t3, 1/k) # 等价写法 y_t3_orig = y_t3 ** (1/k)
注意:若k为偶数,需保证变换后的值非负,避免出现复数结果。
3. Box-Cox变换还原
Box-Cox变换分两种情况定义:
当λ≠0时,
y_t = (y^λ - 1)/λ
当λ=0时,y_t = ln(y)(与log变换一致,还原用np.exp)
还原时对应两种逻辑:
# 假设变换时已记录lambda值lam和变换结果y_boxcox if lam != 0: y_boxcox_orig = np.power(y_boxcox * lam + 1, 1/lam) else: y_boxcox_orig = np.exp(y_boxcox)
注意:Box-Cox变换要求原始数据y>0,还原后需确保结果符合数据的原始取值范围。
内容的提问来源于stack exchange,提问作者ssuhas76
相关产品推荐
相关产品推荐

