📅  最后修改于: 2023-12-03 15:23:33.581000             🧑  作者: Mango
当我们需要在一个numpy数组中查找最近一个或多个元素时,我们可以使用numpy库中的一些函数来完成这个任务。
我们可以通过使用 numpy.abs()
函数来计算数组中所有元素与目标元素之间的差值的绝对值。然后再使用 numpy.argmin()
函数查找差值绝对值的最小值的下标,进而得到最近的元素。
import numpy as np
array = np.array([1, 5, 10, 15, 20])
target = 12
index = np.abs(array - target).argmin()
nearest_element = array[index]
print(nearest_element) # 输出:15
当我们在一个二维数组中查找最近的元素时,我们需要先将数组中的每一个元素都与目标元素之间的欧几里得距离计算出来。具体方法是:
然后再使用 numpy.unravel_index()
函数将欧几里得距离最小的元素的下标解压成二维坐标,进而得到最近的元素。
import numpy as np
array = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
target = np.array([4, 3])
distances = np.sqrt((array[:, :, np.newaxis, 0] - target[np.newaxis, np.newaxis, :, 0]) ** 2 +
(array[:, :, np.newaxis, 1] - target[np.newaxis, np.newaxis, :, 1]) ** 2)
index = np.unravel_index(distances.argmin(), distances.shape[:2])
nearest_element = array[index]
print(nearest_element) # 输出:6
当我们在一个多维数组中查找最近的元素时,我们需要使用与二维数组类似的方法来计算每个元素与目标元素之间的欧几里得距离。然后再使用 numpy.unravel_index()
函数解压欧几里得距离最小的元素的下标,得到最近的元素。
import numpy as np
array = np.array([
[
[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]
],
[
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]
]
])
target = np.array([4, 10, 15])
distances = np.sqrt((array[:, :, :, np.newaxis, 0] - target[np.newaxis, np.newaxis, np.newaxis, :, 0]) ** 2 +
(array[:, :, :, np.newaxis, 1] - target[np.newaxis, np.newaxis, np.newaxis, :, 1]) ** 2 +
(array[:, :, :, np.newaxis, 2] - target[np.newaxis, np.newaxis, np.newaxis, :, 2]) ** 2)
index = np.unravel_index(distances.argmin(), distances.shape[:3])
nearest_element = array[index]
print(nearest_element) # 输出:13