使用 scipy 从 pdf 中选择随机值
Selecting random values from a pdf with scipy
给定数据框:
Brick_cp = pd.DataFrame({"CP":Brick_cp})
对应于这个分布:
sns.distplot(Brick_cp, fit = stats.norm)
VISUALIZATION
然后我根据这些值创建一个普通函数:
loc, scale = stats.norm.fit(Brick_cp.astype(float))
loc, scale = Out[]: (911.1121589743589, 63.42365993765692)
#PROBABILITY DENSITY FUNCTION (PDF)
x = np.linspace (start = 600, stop = 1200, num = 100)
pdf = stats.norm.pdf(x, loc=loc, scale=scale)
PDF
对应的CDF:
cdf = stats.norm.cdf(x, loc=loc, scale=scale)
CDF
最后我创建了概率密度函数 (PDF):
cdf_ = np.linspace(start=0, stop=1, num=10000)
x_ = stats.norm.ppf(cdf_, loc=loc, scale=scale)
PPF
目的是生成从 PDF 中提取的预定义数量的随机值。为此,我想到了在 PPF 中生成 0 到 1 范围内的随机值,并在横坐标上找到相应的值。目前我是这样做的:
v = np.random.uniform(0,1,1000)
f = lambda x1: np.interp(x1, cdf_, x_)
brick_cp_value = f(v)
请问scipy有没有更简单的随机抽样方法,我用的方法是否正确。不幸的是我是初学者。谢谢
编辑:我也试过这个方法:
random_samples = stats.norm.rvs(loc, scale, size=1000)
从高斯采样是很常见的事情,因此有一种简单的方法可以在给定 pdf 的均值 (loc
) 和标准差 (scale
) 的情况下执行此操作(例如使用 numpy.random.normal()):
import pandas as pd
import numpy as np
import seaborn as sns
import scipy.stats as stats
Brick_cp = pd.DataFrame({"CP":Brick_cp})
sns.distplot(Brick_cp, fit = stats.norm)
loc, scale = stats.norm.fit(Brick_cp.astype(float))
random_samples = np.random.normal(loc, scale, size=1000)
给定数据框:
Brick_cp = pd.DataFrame({"CP":Brick_cp})
对应于这个分布:
sns.distplot(Brick_cp, fit = stats.norm)
VISUALIZATION
然后我根据这些值创建一个普通函数:
loc, scale = stats.norm.fit(Brick_cp.astype(float))
loc, scale = Out[]: (911.1121589743589, 63.42365993765692)
#PROBABILITY DENSITY FUNCTION (PDF)
x = np.linspace (start = 600, stop = 1200, num = 100)
pdf = stats.norm.pdf(x, loc=loc, scale=scale)
对应的CDF:
cdf = stats.norm.cdf(x, loc=loc, scale=scale)
CDF
最后我创建了概率密度函数 (PDF):
cdf_ = np.linspace(start=0, stop=1, num=10000)
x_ = stats.norm.ppf(cdf_, loc=loc, scale=scale)
PPF
目的是生成从 PDF 中提取的预定义数量的随机值。为此,我想到了在 PPF 中生成 0 到 1 范围内的随机值,并在横坐标上找到相应的值。目前我是这样做的:
v = np.random.uniform(0,1,1000)
f = lambda x1: np.interp(x1, cdf_, x_)
brick_cp_value = f(v)
请问scipy有没有更简单的随机抽样方法,我用的方法是否正确。不幸的是我是初学者。谢谢
编辑:我也试过这个方法:
random_samples = stats.norm.rvs(loc, scale, size=1000)
从高斯采样是很常见的事情,因此有一种简单的方法可以在给定 pdf 的均值 (loc
) 和标准差 (scale
) 的情况下执行此操作(例如使用 numpy.random.normal()):
import pandas as pd
import numpy as np
import seaborn as sns
import scipy.stats as stats
Brick_cp = pd.DataFrame({"CP":Brick_cp})
sns.distplot(Brick_cp, fit = stats.norm)
loc, scale = stats.norm.fit(Brick_cp.astype(float))
random_samples = np.random.normal(loc, scale, size=1000)