📜  在数组 numpy 中查找最近的元素 - Python (1)

📅  最后修改于: 2023-12-03 15:23:33.581000             🧑  作者: Mango

在numpy数组中查找最近的元素 - Python

当我们需要在一个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
在二维数组中查找最近元素

当我们在一个二维数组中查找最近的元素时,我们需要先将数组中的每一个元素都与目标元素之间的欧几里得距离计算出来。具体方法是:

  1. 计算每个元素的横坐标与目标元素的横坐标之差的平方
  2. 计算每个元素的纵坐标与目标元素的纵坐标之差的平方
  3. 将两个平方和开根号,得到欧几里得距离

然后再使用 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