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]]))