Давайте рассмотрим ваши две проблемы:)
От cudf df до cupy ndarray: Вы можете использовать to_gpu_matrix
и преобразовать его в массив cupy, как показано ниже. Это сохраняет все на GPU, поскольку это довольно эффективно.
arr_cupy = cp.array(df.to_gpu_matrix())
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
Вместе они могут выглядеть так:
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
- искусственно созданный нуль
Надеюсь, что это поможет!