利用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 cassandra对象映射注释   java定制Solr TokenFilter lemmatizer   字符串从Java文件中读取windows文件名   java如何在Windows上设置StanfordCorenlp服务器以返回文本   java axis2“意外的子元素值”   java使用POI HSSF获取错误   多线程Java等待计时器线程完成   java ForkJoinPool BuffereImage处理风格   从java代码运行Python脚本   java将字节[]转换为短[],使每个短元素包含13位数据   java如何为swing jframe应用程序将代码划分为类   java使用okhttp更改baseurl   java AlertDialog。建设者setView导致堆栈溢出错误   java如何在特定的radius 安卓 studio中接收地址列表?