Python 如何使用numpy在三维阵列列表中查找最近的值?
假设我有一个存储多个3D数组的变量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
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
我明白了,我已经更新了我的答案。可以循环遍历每个数组切片,然后单独考虑切片和值。