python实现反归一化inverse_scaling

lhsmdu是拉丁超立方抽样的一个包,从github中下载的。利用这个抽样获得的是已经归一化的值,也就是0~1之间的多维数组。 现在把这些数组还原到原取值范围内的真值。代码如下:

import lhsmdu
import numpy 
import matplotlib.pyplot as plt
import random

# inverse_transform func
def transition_sample(sample, max_min):
#     scalar is:   the fist array is max , the second array is min
    sample = np.array(sample)
    num_dimensions = sample.shape[0]
    num_samples = sample.shape[1]
#     print("sample:", sample,"\n","maxmin", max_min,"\n")
    scal = max_min[0]-max_min[1]
    print("1scal:", scal, "\n")
    scal = scal.reshape(num_dimensions,1)
    print("max_min_scalar:\n", scal)
    each_dimension_min = max_min[1].reshape(num_dimensions, 1)
    print("each_dimension_min: \n", each_dimension_min)
    scal_sample = sample * scal + each_dimension_min
    return scal_sample

test_sample1 = lhsmdu.sample(3, 5)
#max_min has two sub-array = [[max-array], [min-array]]
max_min = np.array([[10, 100, 1000], [0, 0, 1]])
sca_sample1 = transition_sample(test_sample1, max_min)
print(test_sample1, sca_sample1)

result:

1scal: [ 10 100 999] 

max_min_scalar:
 [[ 10]
 [100]
 [999]]
each_dimension_min: 
 [[0]
 [0]
 [1]]

(matrix([[0.3731836 , 0.6263687 , 0.49052078, 0.09095371, 0.89126674],
         [0.58614079, 0.86543857, 0.72285461, 0.17926269, 0.21010773],
         [0.37571079, 0.1529918 , 0.64157448, 0.46510226, 0.86211735]]),
 array([[  3.73183596,   6.26368704,   4.90520776,   0.90953712,
           8.91266742],
        [ 58.61407898,  86.54385727,  72.28546074,  17.92626893,
          21.01077306],
        [376.33508376, 153.83880783, 641.93290392, 465.63715667,
         862.25523207]]))

版权声明:本文为DTEzhihao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。