相关疑难解决方法(0)

Python中的二进制搜索(二分)

是否有一个库函数在列表/元组上执行二进制搜索并返回项目的位置(如果找到)和'False'(-1,None等),如果没有?

我在bisect模块中找到了函数bisect_left/right ,但即使该项不在列表中,它们仍会返回一个位置.这对于他们的预期用途来说非常好,但我只是想知道一个项目是否在列表中(不想插入任何内容).

我想过使用bisect_left然后检查那个位置的项目是否等于我正在搜索的项目,但这看起来很麻烦(我还需要检查边界是否可以大于我列表中的最大数字).如果有一个更好的方法我想知道它.

编辑为了澄清我需要这个:我知道字典非常适​​合这个,但我试图尽可能降低内存消耗.我的预期用法是一种双向查找表.我在表中有一个值列表,我需要能够根据它们的索引访问这些值.而且如果值不在列表中,我希望能够找到特定值的索引或None.

使用字典是最快的方法,但会(大约)加倍内存需求.

我在问这个问题,认为我可能忽略了Python库中的某些东西.正如Moe建议的那样,我似乎必须编写自己的代码.

python binary-search bisection

170
推荐指数
8
解决办法
17万
查看次数

查找最近的值并返回Python中的数组索引

我发现这篇文章:Python:在数组中查找元素

它是关于通过匹配值返回数组的索引.

另一方面,我所想做的是相似但不同的.我想找到目标值的最近值.例如我正在寻找4.2,但我知道在数组中没有4.2,但我想返回值4.1而不是4.4的索引.

这样做的最快方法是什么?

我正在考虑用旧的方式来做它,就像我以前用Matlab做的那样,它使用数组A,我想从索引到减去目标值并取绝对值,然后选择min.像这样: -

[~,idx] = min(abs(A - target))
Run Code Online (Sandbox Code Playgroud)

这是Matlab代码,但我是Python的新手,所以我在想,有没有一种快速的方法在Python中做到这一点?

非常感谢你的帮助!

python numpy python-3.x

34
推荐指数
4
解决办法
4万
查看次数

NumPy:Vectorize为另一个数组中的每个元素在数组中查找最接近的值

输入

known_array:numpy数组; 仅由标量值组成;shape: (m, 1)

test_array:numpy数组; 仅由标量值组成;shape: (n, 1)

产量

indices:numpy数组; shape: (n, 1); 对于每个值,test_array查找最接近的值的索引known_array

residual:numpy数组; shape: (n, 1); 对于每个值,test_array找到与最接近的值的差异known_array

In [17]: known_array = np.array([random.randint(-30,30) for i in range(5)])

In [18]: known_array
Out[18]: array([-24, -18, -13, -30,  29])

In [19]: test_array = np.array([random.randint(-10,10) for i in range(10)])

In [20]: test_array
Out[20]: array([-6,  4, -6,  4,  8, -4,  8, -6,  2,  8])
Run Code Online (Sandbox Code Playgroud)

示例实现(未完全矢量化)

def find_nearest(known_array, value): …
Run Code Online (Sandbox Code Playgroud)

python algorithm numpy vectorization cython

5
推荐指数
3
解决办法
1816
查看次数

在已排序的Python列表中,找到与目标值最接近的值及其在列表中的索引

我试图在 python 的排序列表中获取最接近的值及其索引。

在 MATLAB 中,可以通过以下方式实现:

[closest_val,index] = min(abs(array - target))
Run Code Online (Sandbox Code Playgroud)

我想知道是否有类似的方法可以在 python 中实现。

我见过同时执行其中一项或另一项的帖子,但我还没有看到两者同时完成。

链接到在列表帖子中查找最接近的值。

python list python-3.x

0
推荐指数
1
解决办法
2109
查看次数