我想将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.
我得到这个错误是因为数据集有空值。 我该怎么做
让我们讨论两个问题:)
从cudf df到cupy ndarray:您可以使用
to_gpu_matrix
并将其强制转换为cupy数组,如下所示。这使它保持在GPU上,因为这是相当有效的https://docs.rapids.ai/api/cudf/stable/api.html#cudf.core.dataframe.DataFrame.to_gpu_matrix
在未来(甚至现在,我还不知道),可能有一个更直接的方法。如果出于某种原因,你需要DLPack,好吧,你的方法行得通。这就引出了第二个问题
空值:要填写空值,应使用
.fillna()
。使用一个您可以判断出不合适的值。 https://docs.rapids.ai/api/cudf/stable/api.html#cudf.core.dataframe.DataFrame.fillna它们合在一起可以如下所示:
输出类型为
cupy.core.core.ndarray
我的测试df的输出阵列是:
其中
-1
是我人工创建的空值希望有帮助
相关问题 更多 >
编程相关推荐