1

喜欢跟随。

>>>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 中读取。然后将字符串转换为双精度值。这将使我的价值

4

2 回答 2

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,)
于 2013-10-31T07:40:30.800 回答
1

它是完全相同的数字,只是它的格式不同,numpy.double而不是float

>>> x = -97.173125220360362
>>> x
-97.17312522036036
>>> np.double(x)
-97.173125220360362
>>> np.double(x) == x
True
于 2013-10-31T07:41:13.117 回答