向NumPy浮点数组首尾添加整数后,整数以科学计数法显示的原因排查
问题原因与解决方案
为什么会出现科学计数法显示?
这是因为你的原数组tmp是浮点类型(float),当你用np.concatenate把整数[785]和[786]拼接到数组两端时,NumPy会自动把整数转换为浮点数(因为NumPy数组只能有单一的数据类型),最终整个数组仍保持float类型。
而NumPy的默认打印规则是:当数组中同时存在极小值(比如你数组里的5.6111699e-10)和较大值(785、786)时,为了统一显示格式,会自动切换到科学计数法,所以785就变成了7.85000000e+02。
解决方法:调整NumPy的打印格式
你不需要改变数组本身的类型,只需要修改NumPy的打印设置,让它按照你期望的格式显示浮点数。这里有几种常用的方式:
1. 禁用科学计数法并指定精度
使用np.set_printoptions()来全局设置打印格式,比如:
import numpy as np # 你的原数组定义 tmp = np.array([2.0526170e-03, 1.2926349e-03, 1.6969059e-03, 3.3049309e-04, 6.6263149e-03, 2.9519806e-03, 2.0714400e-03, 5.4122265e-03, 2.7082241e-03, 3.1686751e-03, 1.3918726e-04, 3.8752297e-04, 3.2962889e-03, 3.2280399e-03, 7.2885421e-03, 3.1624420e-04, 6.6712254e-04, 4.0910598e-03, 5.7867495e-04, 1.2561013e-03, 1.1196338e-03, 1.4153749e-03, 2.6155743e-03, 8.1474101e-03, 1.8185090e-03, 8.7743643e-04, 3.7411891e-03, 1.7805353e-03, 5.3422892e-04, 7.8337354e-04, 5.9816906e-05, 4.0453982e-05, 8.3250977e-04, 5.3460896e-04, 5.6111699e-10, 1.3029578e-03, 6.8478996e-04, 3.4205094e-03, 2.3914864e-03, 5.3406606e-04, 6.6411062e-03, 1.0759196e-03, 1.1909866e-03, 4.7715430e-04, 3.2101159e-03, 1.3727898e-02, 1.3080131e-03, 3.8353755e-04, 2.5187498e-03, 2.2409221e-03, 7.2773243e-04, 4.3422016e-03, 5.0830361e-03, 1.2181720e-03, 1.7945823e-04, 4.1899364e-03, 7.7990706e-05, 3.8116740e-04, 2.1038472e-03, 2.1316914e-03, 9.9269630e-05, 1.3454767e-03, 1.1122935e-02, 1.5853636e-03]) tmp = tmp.flatten() tmp = np.concatenate([[785], tmp, [786]]) # 设置打印选项:禁用科学计数法,保留1位小数 np.set_printoptions(suppress=True, precision=1) print(tmp)
这样打印时,785.0会显示为785.,786.0显示为786.,同时小数值也会按一位小数显示(如果需要保留更多小数,可以调整precision参数)。
2. 自定义格式化函数
如果你想更精细地控制不同数值的显示方式,可以用formatter参数:
np.set_printoptions(formatter={'float': lambda x: '{:.1f}'.format(x)}) print(tmp)
这会强制所有浮点数都显示为一位小数,同样能得到785.和786.的效果。
注意:关于混合类型数组
如果你尝试创建同时包含整数和浮点数的数组,NumPy会自动统一为float类型(因为它不支持异构的数值数组,除非用object dtype,但这会失去NumPy的性能优势,不推荐)。所以最优方案还是保持数组为float类型,调整打印格式即可。
内容的提问来源于stack exchange,提问作者dhn
相关产品推荐
相关产品推荐

