You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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打印配置:

  1. 全局会话生效
import numpy as np
np.set_printoptions(suppress=True)  # 关闭科学计数法,强制固定小数格式

设置后,当前Python会话内所有数组输出都会采用固定小数格式。

  1. 仅当前打印生效
# 临时压制小数值的科学计数法
print(np.array2string(arr, suppress_small=True))

# 或自定义小数精度
print(np.array2string(arr, formatter={'float_kind': lambda x: "{:.3f}".format(x)}))

内容的提问来源于stack exchange,提问作者Purple_Ad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 17:10:34