Меня интересуют рекомендуемые и быстрые способы создания фреймов данных cudf из плотных крошечных объектов. Я видел много примеров разделения столбцов двумерной матрицы на кортежи с последующим вызовом 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
~ 360x медленнее, чем прямой вызов numba.cuda.to_device