使用np.stack堆叠点云数组时添加Z列出现科学计数法问题
问题:np.stack堆叠LAS点云X/Y列无科学计数法,添加Z列后自动启用科学计数法
在使用Python的np.stack处理LAS点云数据时遇到如下现象:仅堆叠X、Y列时,数组输出以固定小数格式展示;但加入Z列后,所有数值自动切换为科学计数法显示。
仅堆叠X、Y列的代码与输出
import laspy import numpy as np las = laspy.read("f:\lidar\pointcloud.laz") arr = np.stack([las.x, las.y], axis=0).transpose((1, 0)) arr
输出结果:
array([[ 368230.825, 5807507.866], [ 368231.821, 5807508.151], [ 368232.935, 5807508.114], ..., [ 368496.193, 5807742.345], [ 368495.747, 5807741.916], [ 368495.412, 5807742.06 ]])
添加Z列堆叠的代码与输出
import laspy import numpy as np las = laspy.read("f:\lidar\pointcloud.laz") arr = np.stack([las.x, las.y, las.z], axis=0).transpose((1, 0)) arr
输出结果:
array([[3.68230825e+05, 5.80750787e+06, 3.10790000e+01], [3.68231821e+05, 5.80750815e+06, 3.11140000e+01], [3.68232935e+05, 5.80750811e+06, 3.11320000e+01], ..., [3.68496193e+05, 5.80774234e+06, 3.33270000e+01], [3.68495747e+05, 5.80774192e+06, 3.29020000e+01], [3.68495412e+05, 5.80774206e+06, 3.13750000e+01]])
原因分析
这是NumPy默认打印规则的特性:
- 仅X/Y列时,所有数值量级相近(105~106级别),NumPy选择固定小数格式保证可读性;
- 加入Z列后,Z值量级(10^1级别)与X/Y差距过大,超过NumPy默认阈值,因此自动切换为科学计数法统一格式。
解决方法
若需强制以非科学计数法展示,可通过以下方式修改NumPy打印配置:
- 全局会话生效
import numpy as np np.set_printoptions(suppress=True) # 关闭科学计数法,强制固定小数格式
设置后,当前Python会话内所有数组输出都会采用固定小数格式。
- 仅当前打印生效
# 临时压制小数值的科学计数法 print(np.array2string(arr, suppress_small=True)) # 或自定义小数精度 print(np.array2string(arr, formatter={'float_kind': lambda x: "{:.3f}".format(x)}))
内容的提问来源于stack exchange,提问作者Purple_Ad
相关产品推荐
相关产品推荐

