Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 推断numpy数组中最近的较小值_Python_Arrays_Python 2.7_Numpy - Fatal编程技术网

Python 推断numpy数组中最近的较小值

Python 推断numpy数组中最近的较小值,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我有一个我的_值数组,我试图在一个真_值数组中推断出最接近的较小值。使用下面的find_nearest函数并不能实现我想要的功能。我如何附加它来查找最近的较小值 import numpy as np true_values = np.array([4.5, 3.0, 2.4, 1.2, 0.1]) my_values = np.array([0.8, 2.1, 3.01, 8.0, 0.2, 2.6, 2.1, 3.99, 1.3]) def find_nearest(array,value

我有一个我的_值数组,我试图在一个真_值数组中推断出最接近的较小值。使用下面的find_nearest函数并不能实现我想要的功能。我如何附加它来查找最近的较小值

import numpy as np

true_values = np.array([4.5, 3.0, 2.4, 1.2, 0.1])
my_values = np.array([0.8, 2.1, 3.01, 8.0, 0.2, 2.6, 2.1, 3.99, 1.3])

def find_nearest(array,value):
    idx = np.abs((array-value)).argmin()
    return array[idx]

nearest = []
for i in my_values:
    nearest.append(find_nearest(true_values,i))

print nearest
# [1.2, 2.4, 3.0, 4.5, 0.1, 2.4, 2.4, 4.5, 1.2]
但是我希望输出是

nearest = [0.1, 1.2, 3.0, 4.5, 0.1, 2.4, 1.2, 3.0, 1.2]
第一个答案是: 为最接近的较大值完成此操作。也许可以将其更改为最接近的较小值?

一种方法-

true\u值[(我的值[:,无]
样本运行-

In [33]: true_values
Out[33]: array([ 4.5,  3. ,  2.4,  1.2,  0.1])

In [34]: my_values
Out[34]: array([ 0.8 ,  2.1 ,  3.01,  8.  ,  0.2 ,  2.6 ,  2.1 ,  3.99,  1.3 ])

In [35]: true_values[(my_values[:,None] < true_values).argmin(1)]
Out[35]: array([ 0.1,  1.2,  3. ,  4.5,  0.1,  2.4,  1.2,  3. ,  1.2])
[33]中的
:真值
Out[33]:数组([4.5,3,2.4,1.2,0.1])
在[34]:我的价值观
Out[34]:数组([0.8,2.1,3.01,8,0.2,2.6,2.1,3.99,1.3])
在[35]中:真值[(我的值[:,无]<真值).argmin(1)]
Out[35]:数组([0.1,1.2,3,4.5,0.1,2.4,1.2,3,1.2])
一种方法-

true\u值[(我的值[:,无]
样本运行-

In [33]: true_values
Out[33]: array([ 4.5,  3. ,  2.4,  1.2,  0.1])

In [34]: my_values
Out[34]: array([ 0.8 ,  2.1 ,  3.01,  8.  ,  0.2 ,  2.6 ,  2.1 ,  3.99,  1.3 ])

In [35]: true_values[(my_values[:,None] < true_values).argmin(1)]
Out[35]: array([ 0.1,  1.2,  3. ,  4.5,  0.1,  2.4,  1.2,  3. ,  1.2])
[33]中的
:真值
Out[33]:数组([4.5,3,2.4,1.2,0.1])
在[34]:我的价值观
Out[34]:数组([0.8,2.1,3.01,8,0.2,2.6,2.1,3.99,1.3])
在[35]中:真值[(我的值[:,无]<真值).argmin(1)]
Out[35]:数组([0.1,1.2,3,4.5,0.1,2.4,1.2,3,1.2])

使用
searchsorted
是一个选项(如上面的评论和链接问题中的一个答案所述):

请注意,
searchsorted
要求按升序对
true\u值进行排序。在这里,有必要翻转示例数组的顺序,然后将索引返回为负整数,以便进行索引


如果
true\u值
未排序(在任何方向),则需要使用
np.argsort
,并且
searchsorted
中的
sorter
参数使用
searchsorted
是一个选项(如上面的注释和链接问题中的一个答案所述):

请注意,
searchsorted
要求按升序对
true\u值进行排序。在这里,有必要翻转示例数组的顺序,然后将索引返回为负整数,以便进行索引


如果
true\u值
未排序(在任何方向),则需要使用
np.argsort
,并且
searchsorted
中的
sorter
参数是否总是排序?如果是这样,您可能需要查看
searchsorted
函数。您链接的另一个答案可以很容易地转换为最接近的较低值。或者,您可以通过坚持
数组值
为负数来修改现有值。
真值
总是排序吗?如果是这样,您可能需要查看
searchsorted
函数。您链接的另一个答案可以很容易地转换为最接近的较低值。或者,您可以通过坚持
数组值
为负值来修改已有的值。
>>> true_values[-np.searchsorted(true_values[::-1], my_values)]
array([ 0.1,  1.2,  3. ,  4.5,  0.1,  2.4,  1.2,  3. ,  1.2])