Python 利用SALib-morris采样器生成正态分布参数样本
我想知道如何使用SALib Morris采样器生成正态分布的样本。(用于使用莫里斯法进行敏感性分析) 由于morris采样器(与saltelli采样器一样)中尚不支持“dists”语句,因此我尝试了一种解决方法(使用具有“dists”的saltelli采样器进行测试,结果有效),但在将均匀分布转换为正态分布时,我使用此morris方法在样本中接收到大量无限值。有解决办法吗?->当然,我不能在我的模拟模型中使用这些无限值 试用代码:Python 利用SALib-morris采样器生成正态分布参数样本,python,sampling,normal-distribution,Python,Sampling,Normal Distribution,我想知道如何使用SALib Morris采样器生成正态分布的样本。(用于使用莫里斯法进行敏感性分析) 由于morris采样器(与saltelli采样器一样)中尚不支持“dists”语句,因此我尝试了一种解决方法(使用具有“dists”的saltelli采样器进行测试,结果有效),但在将均匀分布转换为正态分布时,我使用此morris方法在样本中接收到大量无限值。有解决办法吗?->当然,我不能在我的模拟模型中使用这些无限值 试用代码: from SALib.sample import morris
from SALib.sample import morris
import pandas as pd
import scipy.stats.distributions as ssd
import lhsmdu
# problem definition ('num_vars', 'names', 'bounds', 'dists')
prob_dists_code = {'num_vars': 3,
'names': ['P1', 'P2', 'P3'],
'groups': None,
'bounds': [[0.0, 1.0], [0.0, 1.0], [0.0, 1.0]]}
np_array = morris.sample(prob_dists_code, N=1000, num_levels=4, optimal_trajectories=None)
p1 = ssd.uniform(loc=0.9, scale=0.2)
p2 = ssd.norm(loc=45, scale=10)
p3 = ssd.norm(loc=0, scale=1)
new_samples = np_array
new_samples[:, 0] = lhsmdu.inverseTransformSample(p1, np_array[:, 0])
new_samples[:, 1] = lhsmdu.inverseTransformSample(p2, np_array[:, 1])
new_samples[:, 2] = lhsmdu.inverseTransformSample(p3, np_array[:, 2])
df = pd.DataFrame(new_samples)
df.columns = ['P1', 'P2', 'P3']
print(df)