三维点云数组存储以(n,3)浮点数组为基础,支持向量化运算并兼容主流库;可扩展为结构化数组或横向拼接多属性;需权衡float32精度、内存映射及格式对齐。

三维空间点云的数组存储,核心是把每个点的坐标和可选属性组织成结构化、可高效读写的数组形式。最直接的方式是用二维 NumPy 数组,每行代表一个点,每列对应一个字段(如 x、y、z),这是大多数处理流程的起点。
基础结构:XYZ 坐标数组
最小可行表示就是一个 shape 为 (N, 3) 的浮点型数组,N 是点数。x、y、z 分别存放在第 0、1、2 列:
- 内存连续,支持向量化运算(如平移、缩放、法向量估计)
- 兼容 Open3D、PCL、PyTorch3D 等主流库的输入接口
- 加载 PLY/PCD 文件后,通常默认转为此结构
扩展属性:多通道堆叠
实际点云常含强度、颜色、法向量等信息,可用结构化数组或横向拼接实现:
- 结构化数组(
np.dtype):定义字段名与类型,如[('x', 'f4'), ('y', 'f4'), ('z', 'f4'), ('intensity', 'f4'), ('r', 'u1'), ('g', 'u1'), ('b', 'u1')] - 普通数组拼接:shape 为 (N, D),D > 3,例如 (N, 6) 表示 XYZRGB,(N, 9) 可能包含 XYZ + 法向量 nx/ny/nz + 强度
- 注意字段顺序需与后续处理或文件写入逻辑一致,否则易出错
内存与效率考量
数组不是万能的,大规模点云需权衡内存占用与访问速度:
- 单精度 float32 足够多数场景,比 float64 节省一半内存
- 超过千万级点时,考虑分块加载或使用内存映射(
np.memmap)避免一次性载入 - 若需频繁增删点,数组不如列表灵活;此时可先用 list 收集,最后 stack 成数组
对接标准格式的准备
数组只是中间表示,保存前要适配目标格式要求:
- 写 PLY:需按规范组织 vertex 元素,指定 property(如 property float x)
- 写 PCD:头信息中必须声明 fields、size、type、count,并与数组列严格对齐
- 写 LAS/LAZ:需额外字段如回波次数、分类码,纯 XYZ 数组无法直接写入,得借助 laspy 等专用库补充











