喜欢以下。
>>>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
答案 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}}