首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >推荐的cudf Dataframe结构

推荐的cudf Dataframe结构
EN

Stack Overflow用户
提问于 2019-04-30 21:37:25
回答 2查看 622关注 0票数 3

我对推荐的从密集的numpy对象创建cudf DataFrames的快速方法很感兴趣。我见过许多这样的例子:将2dnumpy矩阵的列拆分成元组,然后对元组列表调用cudf.DataFrame --这是相当昂贵的。使用numba.cuda.to_device是相当快的。是否可以使用numba.cuda.to_device,或者是否有更有效的方法来构建DataFrame?

代码语言:javascript
复制
In [1]: import cudf

In [2]: import numba.cuda

In [3]: import numpy as np

In [4]: data = np.random.random((300,100))

In [5]: data.nbytes
Out[5]: 240000

In [6]: %time numba.cuda.to_device(data)
CPU times: user 8 ms, sys: 0 ns, total: 8 ms
Wall time: 4.45 ms
Out[6]: <numba.cuda.cudadrv.devicearray.DeviceNDArray at 0x7f8954f84550>

In [7]: record_data = (('fea%d'%i, data[:,i]) for i in range(data.shape[1]))

In [8]: %time cudf.DataFrame(record_data)
CPU times: user 960 ms, sys: 508 ms, total: 1.47 s
Wall time: 1.61 s
Out[8]: <cudf.DataFrame ncols=100 nrows=300 >

上面的代码显示,与直接调用numba.cuda.to_device相比,cudf.DataFrame要慢大约360倍

EN

回答 2

Stack Overflow用户

发布于 2020-01-08 00:45:33

cudf.DataFrame是一种专用的列格式,对于非常高而不是很宽的数据,它的性能最好。但是,我们有一些重要的零拷贝功能,允许您在numba/cupy/cudf之间以较低的成本移动数据。目前,据我所知,将原始numpy矩阵转换为cudf的最佳方法是使用您所确定的to_device方法,然后是cudf中的from_gpu_matrix

代码语言:javascript
复制
import cudf
import numba.cuda
import numpy as np
data = np.random.random((300, 100))
%time gpu = numba.cuda.to_device(data)
%time df = cudf.DataFrame.from_gpu_matrix(gpu, columns = ['fea%d'%i for i in range(data.shape[1])])

输出:

代码语言:javascript
复制
CPU times: user 4 ms, sys: 0 ns, total: 4 ms
Wall time: 872 µs
CPU times: user 180 ms, sys: 0 ns, total: 180 ms
Wall time: 186 ms

创建cudf.DataFrame所需的186ms是最短的创建时间,主要用于主机端的列内存和元数据管理。

票数 1
EN

Stack Overflow用户

发布于 2021-02-01 06:28:46

请允许我提一下,cudf.DataFrame.from_gpu_matrix()方法从Rapids0.17开始就被弃用了。

现在,cudf.DataFrame()接受Numba DeviceNDArrays作为输入数据。

代码语言:javascript
复制
import cudf
import numba as nb

# Convert a Numba DeviceNDArray to a cuDF DataFrame
src = nb.cuda.to_device([[1, 2], [3, 4]])
dst = cudf.DataFrame(src)

print(type(dst), "\n", dst)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55922162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档