本文详解如何利用 fastkde 库对一维数据集估计核密度,并在任意指定位置(包括原始数据点或新坐标)高效获取密度值,重点介绍 pdf_at_points 的正确用法与实践要点。
本文详解如何利用 fastkde 库对一维数据集估计核密度,并在任意指定位置(包括原始数据点或新坐标)高效获取密度值,重点介绍 `pdf_at_points` 的正确用法与实践要点。
fastkde 是一个专为大规模数据设计的快速核密度估计(KDE)Python 包,其核心优势在于采用 FFT 加速与自适应带宽策略,在保持高精度的同时显著提升计算效率。当处理单变量(一维)数据时,用户常误以为需调用 fastkde.pdf() 并传入单个数组——但该函数默认用于多维联合密度估计(如二维 x, y),并返回支持 .plot() 的 PDF 对象;而对给定坐标点批量预测密度值,必须使用专用接口 fastkde.pdf_at_points()。
以下为标准用法示例:
import numpy as np
import fastkde
# 生成 10 万点一维样本
N = int(1e5)
z = 50 * np.random.normal(size=N) + 0.1
# 定义待评估密度的查询点(可为任意数值列表,不需属于 z)
w = list(range(10, 0, -2)) # 即 [10, 8, 6, 4, 2]
# 关键:使用 pdf_at_points 进行点密度预测
density_values = fastkde.pdf_at_points(z, list_of_points=w)
print("查询点 w:", w)
print("对应密度值:", np.round(density_values, 6))
# 输出示例:[0.007932 0.007929 0.007921 0.007907 0.007885]
✅ 关键说明与注意事项:
- pdf_at_points(data, list_of_points) 中,data 是训练样本(一维 ndarray 或 list),list_of_points 是目标评估点的一维序列(list, tuple, 或 ndarray),二者均为标量集合;
- 返回值为 np.ndarray,长度等于 list_of_points 长度,每个元素即对应点处的 PDF 估计值;
- 该函数内部自动执行带宽选择、网格化与插值,无需手动配置 nbin 或 lower/upper 边界(但高级用户可通过 **kwargs 传递 nbin=256, lower=-100, upper=100 等参数微调);
- 若需对原始样本 z 中每个点自身求密度(即 z[i] 处的 f(z[i])),直接传入 z 即可:fastkde.pdf_at_points(z, z);
- 注意:pdf_at_points 不返回绘图对象,如需可视化,可结合 matplotlib 绘制散点图或直方图叠加密度曲线。
? 性能提示:
对于超大规模 z(如 >1e6)和大量查询点,pdf_at_points 仍保持 O(N log N) 复杂度,远优于传统 scipy.stats.gaussian_kde 的 O(NM)(M 为查询点数)。若仅需少量点(如
综上,fastkde.pdf_at_points() 是单变量场景下精准、简洁、高性能的密度点预测首选接口——牢记其输入结构与语义,即可无缝集成至数据分析与建模流程中。










