
本文旨在提供一种使用Numba优化Python嵌套列表搜索的方法,特别是在处理大量素数时。通过预计算有效的素数组合,并利用Numba的即时编译功能,可以显著提高搜索效率,从而在合理的时间内找到满足特定条件的最小素数集合。文章将详细介绍算法实现,并提供可执行的示例代码。
在处理大规模数据时,Python的循环和条件判断可能会成为性能瓶颈。对于嵌套列表搜索,尤其是在涉及到素数判断等计算密集型操作时,优化变得尤为重要。本文将介绍如何使用Numba库来加速这类搜索过程,以解决寻找满足特定条件的素数组合问题。
我们需要在一个素数列表中找到满足以下条件的五个素数:
Numba是一个Python的即时(JIT)编译器,它可以将Python和NumPy代码转换为快速的机器码。通过使用Numba,我们可以显著提高代码的执行速度,尤其是在循环和数值计算方面。
立即学习“Python免费学习笔记(深入)”;
以下是使用Numba优化的代码示例:
import numpy as np
from numba import njit, prange
@njit
def prime(a):
"""判断一个数是否为素数"""
if a < 2:
return False
for x in range(2, int(a**0.5) + 1):
if a % x == 0:
return False
return True
@njit
def str_to_int(s):
"""将字符串转换为整数"""
final_index, result = len(s) - 1, 0
for i, v in enumerate(s):
result += (ord(v) - 48) * (10 ** (final_index - i))
return result
@njit
def generate_primes(n):
"""生成小于n的所有素数"""
out = []
for i in range(3, n + 1):
if prime(i):
out.append(i)
return out
@njit(parallel=True)
def get_comb(n=100_000):
"""
生成满足条件的素数组合
"""
# 生成所有小于n的素数
primes = generate_primes(n)
n_primes = len(primes)
# 生成所有有效的素数组合
combs = np.zeros((n_primes, n_primes), dtype=np.uint8)
for i in prange(n_primes):
for j in prange(i + 1, n_primes):
p1, p2 = primes[i], primes[j]
c1 = str_to_int(f"{p1}{p2}")
c2 = str_to_int(f"{p2}{p1}")
if not prime(c1) or not prime(c2):
continue
combs[i, j] = 1
all_combs = []
for i_p1 in prange(0, n_primes):
for i_p2 in prange(i_p1 + 1, n_primes):
if combs[i_p1, i_p2] == 0:
continue
for i_p3 in prange(i_p2 + 1, n_primes):
if combs[i_p1, i_p3] == 0:
continue
if combs[i_p2, i_p3] == 0:
continue
for i_p4 in prange(i_p3 + 1, n_primes):
if combs[i_p1, i_p4] == 0:
continue
if combs[i_p2, i_p4] == 0:
continue
if combs[i_p3, i_p4] == 0:
continue
for i_p5 in prange(i_p4 + 1, n_primes):
if combs[i_p1, i_p5] == 0:
continue
if combs[i_p2, i_p5] == 0:
continue
if combs[i_p3, i_p5] == 0:
continue
if combs[i_p4, i_p5] == 0:
continue
p1, p2, p3, p4, p5 = (
primes[i_p1],
primes[i_p2],
primes[i_p3],
primes[i_p4],
primes[i_p5],
)
ccomb = np.array([p1, p2, p3, p4, p5], dtype=np.int64)
if np.sum(ccomb) < n:
continue
all_combs.append(ccomb)
print(ccomb)
break
return all_combs
all_combs = np.array(get_comb())
print()
print("Minimal combination:")
print(all_combs[np.sum(all_combs, axis=1).argmin()])通过使用Numba优化Python嵌套列表搜索,我们可以显著提高代码的执行速度,从而在合理的时间内找到满足特定条件的最小素数集合。这种优化方法可以应用于其他类似的搜索问题,例如在图形搜索、数据挖掘等领域。
以上就是优化Python嵌套列表搜索:使用Numba加速素数组合查找的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号