使用Numpy更快地进行计算

时间:2019-08-26 02:45:29

标签: python python-3.x numpy

我有这个程序可以列出一定范围内的素数。问题是数字越大,速度越慢。我如何使用Numpy提高速度?如果不是numpy,还有其他方法可以加快计算速度吗?

from datetime import date
import time
import numpy as np

today = date.today()

lower = int(input("Starting Number: "))
upper = int(input("Ending Number: "))

print("Prime numbers between",lower,"and",upper,"are:")
with open("primenumbers.txt","a") as file:
    file.write("\n")
    file.write("{}".format(today))
    file.write("\n")

start = time.time()

for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,num):
           if (num % i) == 0:
               break
       else:
         print(num)
         with open("primenumbers.txt","a") as file:
             file.write("\n")
             file.write("{}".format(num))
end = time.time()
print(end - start)

我想更快地处理数据,请显示一些代码。

2 个答案:

答案 0 :(得分:1)

Sieve方法是找到质数的有效方法之一。我的答案是受this SO的启发。一百万我得到了一个时间

16 ms ± 3.68 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

Numpy实施

def first_n_prime_numbres(n):    
    s = np.arange(3, n, 2)
    for m in range(3, int(n ** 0.5)+1, 2):         
        if s[(m-3)//2]: 
            s[(m*m-3)//2::m]=0
    return np.r_[2, s[s>0]]

first_n_prime_numbres(100)

答案 1 :(得分:0)

您一次又一次地计算相同的数字:

for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,num):

相反,您可以保存结果并进行检查。检出动态编程。