代码之家  ›  专栏  ›  技术社区  ›  Liris

最接近值的元素(Elementwise,numpy数组)

  •  3
  • Liris  · 技术社区  · 3 年前

    我过去常常使用 min([a, b], key=lambda x:abs(x-x0)) 找出哪一个 a b 最接近 x0 .

    a = 1
    b = 2
    x0 = 1.49
    print(min([a, b], key=lambda x:abs(x-x0)))
    # >>> 1
    

    现在, b 是具有任意维数的numpy数组。我想逐个元素地构建一个由两个数组中最接近x0的值组成的数组。

    import numpy as np
    
    a = np.array([[1, 2], [3, 5]])
    b = np.array([[6, 2], [6, 2]])
    
    ## case 1
    x0 = 4
    # >>> should return np.array([[6, 2], [3, 5]])
    
    ## case 2
    x0 = np.array([[1, 2], [3, 4]])
    # >>> should return np.array([[1, 2], [3, 5]])
    

    为了找到两个数组之间的元素最小值,我们可以使用 numpy.minimum . 不幸的是,这并不需要 lambda 用作参数。

    我该怎么办?

    0 回复  |  直到 3 年前
        1
  •  1
  •   Marat    3 年前

    这就是你要找的吗?

    np.where(np.abs(a - x0) < np.abs(b - x0), a, b)
    
        2
  •  0
  •   mathfux    3 年前

    numpy 不支持关键功能。一种可能的解决方案是将距离存储在单独的数组中,并使用 np.argmin 以4D点为例:

    points = np.array([[0, 0.1, 0.2, 0.3], [3, 4, 5, 5], [6, 4.5, 1, 1]])
    x0 = [3, 0.5, 5, 5]
    distances = np.sum((points - x0)**2, axis=1)
    output = points[np.argmin(distances)]
    

    输出:

    array([3., 4., 5., 5.])