如何在h3-py中使用向量化H3函数?解决调用报错问题
针对H3-py 3.7.6版本的百万级Numpy经纬度数组向量化转换方案
问题原因说明
h3.geo_to_h3_vect是H3-py 2.x版本的旧函数,3.x版本已移除,因此调用会触发AttributeError。- 直接调用
h3.api.numpy_int.geo_to_h3报错TypeError: only size-1 arrays can be converted to Python scalars,通常是因为当前版本该函数对Numpy数组的输入支持存在兼容性限制,或输入维度/类型不符合要求(需确保为一维float类型数组)。
正确解决方案
方案一:使用Numpy专属API(优先推荐)
导入h3.api.numpy_int模块并调用,该API专为Numpy数组优化,原生支持向量化输入:
import numpy as np import h3.api.numpy_int as h3_np # 生成百万级经纬度数组 lats = np.random.uniform(0, 90, 1_000_000) lons = np.random.uniform(0, 90, 1_000_000) # 向量化转换为H3 ID h3_ids = h3_np.geo_to_h3(lats, lons, 6)
方案二:批量处理兼容方案
若方案一仍报错,可通过批量函数处理,将Numpy数组转换为元组列表后调用:
import numpy as np import h3 # 生成百万级经纬度数组 lats = np.random.uniform(0, 90, 1_000_000) lons = np.random.uniform(0, 90, 1_000_000) # 转换为(lat, lon)元组列表 points = list(zip(lats, lons)) # 批量生成H3 ID并转回Numpy数组 h3_ids = np.array(h3.bulk_geo_to_h3(points, res=6))
内容的提问来源于stack exchange,提问作者Georg Heiler
相关产品推荐
相关产品推荐

