gpt4 book ai didi

python - numpy arange 中的 else 语句

转载 作者:行者123 更新时间:2023-12-05 01:53:24 25 4
gpt4 key购买 nike

基本上我想比较两个 np.arange()

之间的变量
x = 22.03
first = np.arange(18.5, 24.99, 0.01)
second = np.arange(25.0, 29.99, 0.01)

if x in first:
print("x is in first")
elif x in second:
print("x is in second")

我希望看到“x isin first”,但我没有在终端上打印任何内容。如果我添加另一个 else: 语句,它将执行其中的任何内容。

我正在使用 numpy,因为我想要一个范围内的 float 。原生 range() 函数不支持 float

两者没有可比性,这是为什么呢?

最佳答案

你的数组:

In [254]: first = np.arange(18.5, 24.99, 0.01)
In [255]: first.shape
Out[255]: (649,)
In [256]: first[:10]
Out[256]:
array([18.5 , 18.51, 18.52, 18.53, 18.54, 18.55, 18.56, 18.57, 18.58,
18.59])
In [257]: x=22.03

x 未“找到”

In [258]: x in first
Out[258]: False

让我们寻找一个势均力敌的比赛:

In [259]: np.nonzero(np.isclose(x,first))
Out[259]: (array([353]),)
In [260]: first[353]
Out[260]: 22.030000000000552

由于浮点计算,最接近的匹配仍然有点偏差。浮点值的“in/equal”测试不可靠。

arange 在使用 float 步长时推荐linspace。结果值更符合我们的期望:

In [264]: first1 = np.linspace(18.5,24.98,len(first))
In [265]: np.nonzero(np.isclose(x,first1))
Out[265]: (array([353]),)
In [266]: first1[353]
Out[266]: 22.03
In [267]: x in first1
Out[267]: True

仍然存在 float 不匹配的可能性。

为了更好地查看 float 的完整精度,让我们将数组显示为列表

In [268]: first[:10].tolist()
Out[268]:
[18.5,
18.51,
18.520000000000003,
18.530000000000005,
18.540000000000006,
18.550000000000008,
18.56000000000001,
18.57000000000001,
18.580000000000013,
18.590000000000014]
In [269]: first1[:10].tolist()
Out[269]: [18.5, 18.51, 18.52, 18.53, 18.54, 18.55, 18.56, 18.57, 18.58, 18.59]

关于python - numpy arange 中的 else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71071089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com