【问题标题】:Checking if float value is in numpy array检查浮点值是否在numpy数组中
【发布时间】:2020-03-15 18:23:06
【问题描述】:

我试图找出一个值是否在 numpy 数组中。该数组使用 linspace 方法生成,并获取 float64 类型。我的值是浮点型。作为结果“数组中的值”检查总是返回假。找出float值是否在float64数组中最有效的方法是什么?

import numpy as np

def find_nearest(array, value):
    array = np.asarray(array)
    if value not in array:
        array = np.insert(array, np.searchsorted(array, value), value)
    return array

array = np.linspace(0,1,21)
print(array)
value = 0.3
print(find_nearest(array, value))

【问题讨论】:

  • 与浮动的精确匹配是不确定的,因为印象。有一个isclose 函数可以检查容差范围内的匹配项。

标签: python numpy floating-point


【解决方案1】:

谢谢,刚刚想通了。下面的代码可以按照您的建议与 isclose 一起使用:

import numpy as np

def find_nearest(array, value):
    array = np.asarray(array)
    if not np.any(np.isclose(array, value)):
        array = np.insert(array, np.searchsorted(array, value), value)
    return array

array = np.linspace(0,1,21)
print(array)

value = 0.3

print(find_nearest(array, value))

【讨论】:

    【解决方案2】:

    当你打印数组的值时

    for value in array:
        print(value)
    
    #op
    0.0
    0.05
    0.1
    0.15000000000000002
    0.2
    0.25
    0.30000000000000004  
    0.35000000000000003
    0.4
    0.45
    0.5
    0.55
    0.6000000000000001
    0.65
    0.7000000000000001
    0.75
    0.8
    0.8500000000000001
    0.9
    0.9500000000000001
    1.0
    

    现在你试图用 0.30000000000000004 检查 0.3,这就是它返回的原因 一直都是假的,你要么将数组的值四舍五入到某个小数位,否则它会起作用

    【讨论】:

      猜你喜欢
      • 2019-08-09
      • 2019-06-27
      • 2013-11-29
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      相关资源
      最近更新 更多