最接近值的元素(Elementwise,numpy 数组)
Closest element to a value (Elementwise, numpy array)
我曾经使用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
现在,a
和 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
函数作为参数。
我该怎么办?
这是您要找的吗?
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, 5]
distances = np.sum((points - x0)**2, axis=1)
output = points[np.argmin(distances)]
输出:
array([3., 4., 5., 5.])
我曾经使用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
现在,a
和 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
函数作为参数。
我该怎么办?
这是您要找的吗?
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, 5]
distances = np.sum((points - x0)**2, axis=1)
output = points[np.argmin(distances)]
输出:
array([3., 4., 5., 5.])