如何使用numpy在一个3D数组列表中寻找最近的值?

问题描述 投票:0回答:1

假设我有一个变量 arr 中存储多个3D数组。

arr = [[[1,2,3],
       [4,5,6],
       [10,11,12]]]

      [[[13,14,15],
        [16,17,18],
        [19,20,21]]]

我如何才能在变量 vals 来自 arr. 中第一个值的最接近值。vals 的第1个数组中进行搜索。 arr 第二阵列中的第二个

vals = np.array([3.2, 6.8])

预期的结果。

nearest values = [3, 13]
python numpy
1个回答
1
投票

鉴于你的值没有按照任何顺序连接,我们可以将数组扁平化,以达到理想的结果。

import numpy as np

arr = np.array([[[1,2,3], [4,5,6], [10,11,12]],
                [[1,2,3], [4,5,6], [7,8,9]]])

vals = np.array([3.2, 6.8])

[arr.ravel()[np.argmin(np.abs(arr.ravel()-v))] for v in vals]
>>> [3, 7]

EDIT

你可以循环检查数组中的每一个片断,分别检查片断。

[a.ravel()[np.argmin(np.abs(a.ravel()-vals[i]))] for i, a in enumerate(arr)]
>>> [3, 13]
© www.soinside.com 2019 - 2024. All rights reserved.