gpt4 book ai didi

python - 推荐的cudf数据框构建

转载 作者:行者123 更新时间:2023-12-04 17:37:50 29 4
gpt4 key购买 nike

我对从密集的 numpy 对象创建 cudf 数据帧的推荐和快速方法感兴趣。我见过很多将 2d numpy 矩阵的列拆分为元组然后调用 cudf.DataFrame 的示例。在元组列表中——这是相当昂贵的。使用 numba.cuda.to_device相当快。是否可以使用 numba.cuda.to_device或者有没有更有效的方法来构建 DataFrame ?

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 >

以上显示 cudf.DataFrame比直接调用 numba.cuda.to_device 慢约 360 倍

最佳答案

cudf.DataFrame是一种专用的柱状格式,对于非常高而不是宽的数据表现最佳。但是,我们有一些重要的零拷贝函数,允许您在 numba/cupy/cudf 之间移动数据。便宜。此时,据我所知,获得原始数据的最佳方式 numpy矩阵转化为 cudf正在使用 to_device您确定的方法,然后是 from_gpu_matrixcudf .

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])])

出去:
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是最短创建时间,主要用于主机端管理列式内存和元数据的开销。

关于python - 推荐的cudf数据框构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55922162/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com