在numpy-array

时间:2015-09-23 15:24:28

标签: python numpy

例如,当我这样做时:

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呆在一起时,我什么也做不了?

1 个答案:

答案 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)