【问题标题】:Need Help In Converting cuDF Dataframe to cupy ndarray需要帮助将 cuDF Dataframe 转换为 cupy ndarray
【发布时间】:2020-05-07 14:59:30
【问题描述】:

我想将 cuDF 数据帧转换为 cupy ndarray。 我在下面使用这个代码:

import time
import numpy as np
import cupy as cp
import cudf
from numba import cuda
df = cudf.read_csv('titanic.csv')
arr_cupy = cp.fromDlpack(df.to_dlpack())

输出:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-176-0d6ff9785189> in <module>
----> 1 arr_cupy = cp.fromDlpack(df.to_dlpack())

~/.conda/envs/rapids_013/lib/python3.7/site-packages/cudf/core/dataframe.py in to_dlpack(self)
   3821         import cudf.io.dlpack as dlpack
   3822 
-> 3823         return dlpack.to_dlpack(self)
   3824 
   3825     @ioutils.doc_to_csv()

~/.conda/envs/rapids_013/lib/python3.7/site-packages/cudf/io/dlpack.py in to_dlpack(cudf_obj)
     72         )
     73 
---> 74     return libdlpack.to_dlpack(gdf_cols)

cudf/_libxx/dlpack.pyx in cudf._libxx.dlpack.to_dlpack()

ValueError: Cannot create a DLPack tensor with null values.                     Input is required to have null count as zero.

我收到此错误是因为数据集有空值。 我该怎么做??

【问题讨论】:

    标签: python nvidia cupy rapids cudf


    【解决方案1】:

    让我们讨论你的两个问题:)

    从 cudf df 到 cupy ndarray: 您可以使用 as_gpu_matrix 并将其转换为如下所示的 cupy 数组。这样可以将所有内容都保留在 GPU 上,非常高效。

    arr_cupy = cp.array(df.as_gpu_matrix())
    

    https://docs.rapids.ai/api/cudf/stable/api_docs/api/cudf.DataFrame.as_gpu_matrix.html

    在未来(甚至我还不知道的现在),可能会有更直接的方法。如果出于某种原因您需要 DLPack,好吧,您的方式行得通。这就引出了第二个问题……

    空值:要填写空值,您应该使用.fillna()。使用一个你能看出它不合适的值。 https://docs.rapids.ai/api/cudf/stable/api_docs/api/cudf.DataFrame.fillna.html

    它们一起看起来像这样:

    arr_cupy = cp.array(df.fillna(-1).to_gpu_matrix())
    

    输出类型为cupy.core.core.ndarray

    我的测试 df 的输出数组是:

    array([[          0,    17444256,        1200],
           [          1,   616285571,         987],
           [          2,          -1,         407],
           ...,
    

    -1 是我人为创建的空值

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2018-11-24
      • 2019-12-23
      • 2021-11-06
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多