需要帮助将 cuDF Dataframe 转换为 cupy ndarray
Need Help In Converting cuDF Dataframe to cupy ndarray
我想将 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: 您可以使用 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
是我人为创建的null
希望对您有所帮助!
我想将 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: 您可以使用 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
是我人为创建的null
希望对您有所帮助!