Python嵌套列表转numpy数组时不同操作输出格式存在差异的原因是什么
输出格式差异的根本原因
两种转换操作得到的numpy数组底层数据完全一致,格式差异仅来自numpy的打印规则,和输入列表的变量来源无关,具体分为两个维度:
1. 逗号有无的区别
- 带逗号的是numpy数组的
repr()表示:当你直接在交互式终端、Jupyter单元格末尾输入数组变量名回车时,默认触发该输出格式,会自带array(前缀和元素间逗号。 - 不带逗号的是numpy数组的
str()表示:当你调用print(array)时,默认触发该输出格式,无array(前缀,元素间也没有逗号。
你两次输出大概率是分别用了直接输出变量和print两种方式,才出现该差异。
2. 科学计数法与普通小数的区别
numpy默认启用自动格式匹配的打印规则,是否切换为科学计数法受两个条件影响:
- 全局打印配置
np.set_printoptions()的参数,比如scientific参数是否被手动修改过; - 当前Python会话中,是否打印过包含极大值、极小值的数组,触发了numpy自动切换科学计数法的规则。
你两次转换的间隔中,大概率有其他代码修改了全局打印配置、或是触发过科学计数法的自动开关,才出现格式差异。
验证方法
你可以在转换前强制固定numpy打印参数,两次输出就会完全一致,且可以验证数据本身没有差异:
import numpy as np # 固定打印配置:关闭科学计数法,浮点数保留1位小数 np.set_printoptions(suppress=True, precision=1) listt = [[1986.0,71.2,28.4,13.9,34.7], [1987.0,72.0,30.4,14.0,32.4]] array1 = np.asarray(listt) print(array1) x = [[1986.0, 71.2, 28.4, 13.9, 34.7], [1987.0, 72.0, 30.4, 14.0, 32.4]] array2 = np.asarray(x) print(array2) # 验证两个数组完全相等 print(np.array_equal(array1, array2)) # 输出为True
内容的提问来源于stack exchange,提问作者Cressy de borbon
相关产品推荐
相关产品推荐

