Python 如何使用numpy在三维阵列列表中查找最近的值?

Python 如何使用numpy在三维阵列列表中查找最近的值?,python,numpy,Python,Numpy,假设我有一个存储多个3D数组的变量arr arr = [[[1,2,3], [4,5,6], [10,11,12]]] [[[13,14,15], [16,17,18], [19,20,21]]] 如何从arr获取变量vals中与相应给定值最接近的值。应仅在arr的第一个数组中搜索vals中第一个值的最近值,并在第二个数组中搜索第二个值 vals = np.array([3.2, 6.8]) 预期结果: nearest

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

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

      [[[13,14,15],
        [16,17,18],
        [19,20,21]]]
如何从
arr
获取变量
vals
中与相应给定值最接近的值。应仅在
arr
的第一个数组中搜索
vals
中第一个值的最近值,并在第二个数组中搜索第二个值

vals = np.array([3.2, 6.8])
预期结果:

nearest values = [3, 13]

鉴于您的值没有按任何顺序链接,我们可以展平阵列以获得所需的结果:

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]
编辑

您可以在阵列中的每个切片上循环以单独检查切片:

[a.ravel()[np.argmin(np.abs(a.ravel()-vals[i]))] for i, a in enumerate(arr)]
>>> [3, 13]

展平并使用链接问答:
arr.flat[最近的参数(vals,arr.ravel())]
用于
arr
作为数组。@Divakar我想在
arr
的第一个数组中搜索
val
中的第一个值,在
arr
的第二个数组中搜索第二个
val
中的第二个值。
arr
是3D数组列表还是4D数组或3D数组?@Divakar我刚刚更新了这个问题。请查收。我希望在arr的第一个数组中搜索
val
中的第一个值,在arr的第二个切片中搜索
val
中的第二个值。
arr
是一个3D数组列表。我更新了
arr
和相关的预期结果。请检查。您为什么期望新结果?第一个数组的
val
中的第一个值和
val
中的第二个值是
arr
中的第二个数组的
3
最接近第一个数组中的
3.2
,但我看不出
13
如何最接近第二个数组中的
6.8
我明白了,我已经更新了我的答案。可以循环遍历每个数组切片,然后单独考虑切片和值。