我希望能够可视化两个由数据估算出来的概率密度函数之间的联合分布(都是通过KDE获得)。假设有一个KDE,我有一个排序为元组data
的离散x,y
数据。我需要生成具有此分布的随机变量,以执行概率积分变换(最终获得均匀分布)。我生成随机变量的方法如下:
import scipy.stats as st
from scipy import interpolate, integrate
pdf1 = interpolate.interp1d(data[0], data[1])
class pdf1_class(st.rv_continuous):
def _pdf(self,x):
return pdf1(x)
pdf1_rv = pdf1_class(a = data[0][0], b= data[0][-1], name = 'pdf1_class')
pdf1_samples = pdf1_rv.rvs(size=10000)
然而,这种方法非常缓慢。我还收到了以下警告:
有更好的方法生成随机变量吗?IntegrationWarning: 达到了最大细分数(50)。 如果增加限制没有改善,则建议分析被积函数以确定困难之处。 如果可以确定局部困难的位置(奇点、不连续性),则我们可能会从将区间分割并在子范围上调用积分器中获益。 可能应该使用专用积分器。 warnings.warn(msg, IntegrationWarning)
IntegrationWarning: 检测到舍入误差,这阻止了达到所请求的容差。误差可能被低估。 warnings.warn(msg, IntegrationWarning)
_logpdf,_cdf,_logcdf,_ppf,_rvs,_isf,_sf,_logsf
来提高速度。要加快rvs
,覆盖_ppf
(百分点函数,cdf 的反函数)可能已足够。 - unutbu_cdf
,但没有什么显著的区别。然后我也覆盖了_ppf
,现在10000个样本是瞬间完成的。谢谢你。你想把这作为答案吗?我会接受它的。 - mch56_ppf
的努力,我认为您将是撰写出色答案的最佳人选。(回答自己的问题不仅可以接受,而且是鼓励的。) - unutbu