例如,当我这样做时:
In : b = 0.05 + 0j
In : b
Out: (0.05+0j)
In : type(b)
Out: complex
好的,如预期的那样。现在,如果我在numpy-array中执行此操作:
In : a = numpy.array([0,0,0], dtype = complex)
In : a[1] = 0.05
In : a[1]
Out: (0.050000000000000002775557561563+0.j)
In : type(a[1])
Out: numpy.complex128
我显然不希望精确丢失,我该怎么做才能防止这种行为?或者当我想和numpy呆在一起时,我什么也做不了?
答案 0 :(得分:1)
没有精度损失; 0.05 = 5/10在二进制浮点中无法精确表示(分母应为2的幂,以便精确表示)。
这个
的输出可能更有说服力import numpy
b = 0.05 + 0j
a = numpy.array((b, ))
print(b, a[0])
print(b == a[0])
print('%.17g' % b.real)
是
((0.05+0j), (0.050000000000000003+0j))
True
0.050000000000000003
(Ubuntu 14.04,Python 2.7.6,Numpy 1.8.2)