对于那些更熟悉python列表和numpy数组的人: 我注意到当python列表(浮点数)被转换为numpy数组时,会删除尾随的重要零。一个简单的代码说明了:
import numpy as np
# python list
list = [1.20780,4.6340]
# convert to numpy array
arr = np.asfarray(list)
print(arr)
[ 1.2078 4.634 ]
你知道为什么numpy会删除尾随的零吗?知道怎么强迫numpy保持零?
答案 0 :(得分:2)
在数学中,1.2078等于1.20780。
打印方法print
将您的数组定义为预定义类型float64
。
如果要打印5位数字,可以转换为字符串:
In[24]: print ['%.5f'%i for i in arr]
['1.20780', '4.63400']
您还可以使用dtype
来查看编码#bits对内存中图形表示的影响:
In[26]: arr.astype('float16')
Out[26]: array([ 1.20800781, 4.6328125 ], dtype=float16)
In[27]: arr.astype('float32')
Out[27]: array([ 1.20780003, 4.63399982], dtype=float32)
In[28]: arr.astype('float64')
Out[28]: array([ 1.2078, 4.634 ])
In[29]: arr.astype('int')
Out[29]: array([1, 4])
In[30]: arr.astype('int8')
Out[30]: array([1, 4], dtype=int8)
In[31]: arr.astype('float')
Out[31]: array([ 1.2078, 4.634 ])
In[32]: arr.astype('float5')
答案 1 :(得分:0)
如果从Python打印列表,您会发现尾随的零也丢失了:
>>> list = [1.20780,4.6340]
>>> list
[1.2078, 4.634]
基本原因是,对于硬件和运行时系统,它们不重要。它们不会影响float的数值。它们不会影响数字处理,因为硬件在进行计算时不会注意有效数字",而不是数据类型的自然精度。没有考虑误差范围。
您对数值有什么影响?
我明白了。是的,你可以这样做......但保留文件名的原始文本。将其转换为数字值后,尾随零将无法恢复。您将无法区分1.29780与1.2978或1.297800000000
更好的是,对提取的浮点值进行排序,正如我在下面所做的那样。该单行命令执行以下操作
对列表进行排序。
file_list = [ " NEW-2.3087-QA&#34 ;, " NEW-16.8888-HX&#34 ;, " NEW-1.20780-BC&#34 ;, " OLD-9.678900-NO" ]
order_list = sorted(file_list,key = lambda name:float((name.split(' - '))[1]))
打印(order_list)
...和输出:
["NEW-1.20780-BC", "NEW-2.3087-QA", "OLD-9.678900-NO", "NEW-16.8888-HX"]
这样做你需要的吗?你有没有两个文件具有相同的数值,但有不同的表示形式,例如" A-1.0-Z"和" B-1.000-ST" ?