最接近值的元素逐元素,numpy数组

问题描述

我曾经使用min([a,b],key=lambda x:abs(x-x0))来查找ab中哪个最接近x0

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

现在,ab是具有任意维数的numpy数组。我想建立一个由两个数组之间最接近x0的值组成的数组,一个一个

import numpy as np

a = np.array([[1,2],[3,5]])
b = np.array([[6,[6,2]])

## case 1
x0 = 4
# >>> should return np.array([[6,5]])

## case 2
x0 = np.array([[1,4]])
# >>> should return np.array([[1,5]])

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

我应该怎么做?

解决方法

这是您要寻找的吗?

np.where(np.abs(a - x0) < np.abs(b - x0),a,b)
,

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]
distances = np.sum((points - x0)**2,axis=1)
output = points[np.argmin(distances)]

输出:

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