0

如果我运行以下代码,它无法识别数组中的几个数字,例如0.1,即使它0.1在打印时看起来像是在数组中。

import numpy as np

pH = 0.1

print(np.linspace(0.0, 2.9, num=30))

if pH in np.linspace(0.0, 2.9, num=30):
    print("it doesn't recognize 0.1")

pH = 0.3

if pH in np.linspace(0.0, 2.9, num=30):
    print('however it does recognize 0.3')

输出:

[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.  1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.  2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9]
however, it does recognize 0.3
4

2 回答 2

1

这个错误主要是由于 NumPy 和 Python 在存储方面有些挑剔,因此比较浮点整数。

我们可以看到python的0.1其实是:

>>> print('{0:.20f}'.format(0.1))
0.10000000000000000555

而 NumPy0.1实际上是:

>>> import numpy as np
>>> print('{0:.20f}'.format(np.linspace(0.0, 2.9, num=30)[1])) # 0.1 in list
0.09999999999999999167

因此,要正确比较这些,您可以使用提供的math.isclose()numpy.isclose()(比较两个列表):

import math

# -- snip --

for num in np.linspace(0.0, 2.9, num=30):
    if math.isclose(0.1, num):
        print('detected!')
于 2020-01-07T19:25:24.373 回答
0

numpy 数组显示的值似乎与实际值不同。可能是由于浮点精度。如果你想要一种方法来解决这个问题,你可以使用列表理解。

import numpy as np

pH = 0.1

print(np.linspace(0.0, 2.9, num=30))

if pH in [round(x, 5) for x in np.linspace(0.0, 2.9, num=30)]:
    print("it does recognize 0.1")
于 2020-01-07T19:26:35.893 回答