如何保持numpy数组的精度

时间:2013-10-31 07:32:28

标签: python xml numpy

喜欢以下。

>>>a=numpy.array([-97.173125220360362], dtype=double)
>>>b=[]
>>>b.append(a)
>>>b
-97.173125220360362

但是,如果我将值直接分配给List 。它会丢失最后一个数字,如下所示:

>>>b=[-97.173125220360362] 
>>>b
-97.17312522036036
>>>b=[]
>>>b.append(-97.173125220360362)
>>>b
-97.17312522036036

我发现我无法更改最后一个号码。喜欢以下

>>>b=[-97.173125220360364]     
>>>b    
-97.17312522036036    
>>>numpy.double(b)    
-97.173125220360362 not -97.173125220360364

PS
我需要将numpy.array中的许多双数保存到XML文件中。通过阅读XML文件,我发现我丢失了所有最后的numpy 例如
如果我将-97.17312522036036保存到XML中。并从XML读取值作为字符串。然后将字符串转换为double值。这将围绕我的vaule

2 个答案:

答案 0 :(得分:3)

您在这里看到的实际上是numpy float数据类型和内置float数据类型的__repr____str__之间的差异。

不一致。

>>> repr(a[0])
'-97.173125220360362'
>>> repr(float(a[0]))
'-97.17312522036036'

一致。

>>> '%0.18f'%float(a[0])
'-97.173125220360361709'
>>> '%0.18f'%(a[0])
'-97.173125220360361709'

无论哪种方式,它们在内存中的表示都是相同的。您在一个结果中看到的额外“精确度”实际上只是噪音:

>>> struct.unpack('>l', struct.pack('>f', float(-97.17312522036036)))
(-1027450716,)
>>> struct.unpack('>l', struct.pack('>f', float(-97.173125220360362)))
(-1027450716,)
>>> struct.unpack('>l', struct.pack('>f', a[0]))
(-1027450716,)
>>> struct.unpack('>l', struct.pack('>f', float(a[0])))
(-1027450716,)

答案 1 :(得分:1)

它的数字完全相同,只是在numpy.double而不是float而不是>>> x = -97.173125220360362 >>> x -97.17312522036036 >>> np.double(x) -97.173125220360362 >>> np.double(x) == x True 时才会有不同的格式:

{{1}}