利用cuda通过cupy实现了nadaraya-waston核密度和核条件概率估计。它比CPU版本快得多,但它需要高内存的GPU。

kde-gpu的Python项目详细描述


»?

kde_gpu

基于gpu的nadaraya-watson核密度估计器(cuda)

作者

陈晨

运行环境设置

你必须安装cupy才能使用gpu!啊! 见https://github.com/cupy/cupy

类似于scipy.kde_gaussianstatsmodels.nonparametric.kernel_density.KDEMultivariateConditional,我们通过cupy使用cuda实现了nadaraya-waston核密度和核条件概率估计。然而,它比CPU版本快得多,它最大限度地利用了GPU存储器。

  1. 在当前目录中创建一个名为“data”的文件夹。然后复制orl并在内部裁剪yaleb数据集。请确保具有以下文件树结构:
    |---kde_gpu\
    ***——版本.py\
    ***---纳达拉亚华生.py \
    ***---条件概率.py\
    *|---设置.py \
    *|---示例.py \
    *|---readme.md\

  2. 使用以下命令安装kde_gpu:(如果计算机中的默认pythonpython2,请使用pip3

    $ pip install -e .
    

这个命令将运行setup.py,在这里我们指定运行nmf所需的依赖项。我们需要的依赖项是:

       "scipy>=1.0.0",
       "pandas>=0.20.2",

请注意,如果计算机中已安装包的版本号低于所述版本号,pip将卸载过期包,并安装版本号大于或等于setup.py中所述版本号的包。

示例

"""
@author: chen.chen.adl@gmail.com
"""

#import kernel_smoothing
from scipy import stats
import pandas as pd
import cupy as cp
import numpy as np
import time


rv = stats.expon(0,1)

x = rv.rvs(size=10000)

density_real = rv.pdf(x)

t1=time.time()
kde_scipy=stats.gaussian_kde(x.T,bw_method='silverman')
kde_scipy=kde_scipy(x.T)
print(time.time()-t1)

t1=time.time()
kde_cupy=kde(cp.asarray(x.T),bw_method='silverman')
print(time.time()-t1)



df = pd.DataFrame({'x1':x,'kde_scipy':kde_scipy,
                   'kde_cupy':cp.asnumpy(kde_cupy).squeeze(),'real density':density_real})

df['scipy_mean_absolute_error']=np.abs(df['kde_scipy']-df['real density'])
df['cupy_mean_absolute_error']=np.abs(df['kde_cupy']-df['real density'])
print(df.mean())


rv = stats.truncnorm(-3,2,30,10)
nsample=10000
x = cp.asarray(rv.rvs(nsample))
ycondx = cp.asarray(cp.random.rand(nsample))
y = 10*(ycondx-0.5)+x

cdf_conditional_real = ycondx
df = pd.DataFrame({'y':cp.asnumpy(y),'x':cp.asnumpy(x),'real density':cp.asnumpy(cdf_conditional_real)})

df['nadaraya watson']= kernel_smoothing_ecdf(y,x)
df['nw_error']=np.abs(df['nadaraya watson']-df['real density'])
df.mean()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将日期字符串解析为整数变量?   java如何在Spring3+WS2+中使用注释、JibxMarshalling或使用xml配置配置JibxMarshalling和unmarshalling?   安装Oracle Jdeveloper时mac中出现java安装错误。   设置自动保存计时器以在java中定期保存文件(但不使用任何JavaFXAPI)的最佳策略是什么?   模板获取handlebar java中迭代器列表的长度   java如何在特定JAX RS调用中排除对象中的字段?   在Struts 2中抛出NullPointerException的java getText()方法   java比较捐献者和接受者的血型   fedora Java向后兼容性   字符串Java替换多个字符   复制BuffereImage时出现java数组索引错误   并行处理Java 8并行流findFirst   java关闭应用程序后如何离开服务?   Java:Tesseractocr:如何查找单词坐标?