我正在尝试使用加速(GPU 支持)计算进行距离计算,但在处理 pandas 和 cudf 之间的细微差别时遇到了很多麻烦。
我有一个带有车辆和时间点(lat、lng、timestamp)的df,我基于cpu的计算大致是这样的:
df = pd.read_csv('taxis.csv')
results = df.groupby('vehicle').apply(lambda x: get_distance(x))
其中基本上计算使用运算符对齐连续点get_distance
实现的纬度、经度列之间的距离。.shift()
事实证明,尝试使用cudf
和cuspatial
来自 RAPIDSAI 非常令人困惑。
我正在尝试做:
df = cudf.read_csv("vehicles.csv")
grouped_df = df.groupby("vehicle", method="cudf")
results = grouped_df.apply_grouped(gpu_distance,
incols=['lat','lon'],
outcols=dict(tot=np.float64))
我的gpu_distance
功能(什么不起作用)在哪里
def gpu_distance(lat,lon,tot)
lat1 = lat[1:]
lon1 = lon[1:]
lat2 = lat[0:-1]
lon2 = lon[0:-1]
distances = cuspatial.haversine_distance(lat1,lon2,lat2,lon2)
tot = np.sum(distances)
这还不是我的完整用例,但我正在努力构建它,收到有关实际模块的错误
Unknown attribute 'haversine_distance' of type Module(<module 'cuspatial' from {my RAPIDS installation}
任何有问题的想法都将不胜感激,或者如果有更好的文档。
cuspatial.haversine_distance
当不在 groupby 语句中运行时,我能够运行该函数,以下代码正常执行
#
lat1 = df.shift()['lat'][1:]
lon1 = df.shift()['lon'][1:]
lat2 = df['lat'][1:]
lon2 = df['lon'][1:]
res = cuspatial.haversine_distance(lat1,lon1,lat2,lon2)