gpt4 book ai didi

python - 优化 python for 循环

转载 作者:太空狗 更新时间:2023-10-30 00:33:47 25 4
gpt4 key购买 nike

这里有两个程序可以天真地计算素数<= n的个数。
一个是 Python,另一个是 Java。

public class prime{
public static void main(String args[]){
int n = Integer.parseInt(args[0]);
int nps = 0;
boolean isp;

for(int i = 1; i <= n; i++){
isp = true;

for(int k = 2; k < i; k++){
if( (i*1.0 / k) == (i/k) ) isp = false;
}
if(isp){nps++;}
}
System.out.println(nps);
}
}


`#!/usr/bin/python`
import sys
n = int(sys.argv[1])
nps = 0

for i in range(1,n+1):
isp = True
for k in range(2,i):
if( (i*1.0 / k) == (i/k) ): isp = False
if isp == True: nps = nps + 1
print nps

在 n=10000 上运行它们,我得到以下计时。
shell:~$ time python prime.py 10000 && time java prime 10000
1230

真正的 0m49.833s
用户 0m49.815s
系统 0m0.012s
1230

真正的 0m1.491s
用户 0m1.468s
系统 0m0.016s

我在这里以不正确的方式在 python 中使用 for 循环还是 python 实际上慢了这么多?

我不是在寻找专门为计算素数而设计的答案,而是想知道 python 代码是否通常以更智能的方式使用。

Java 代码是用javac 1.6.0_20
使用 Java 版本“1.6.0_18”运行
OpenJDK 运行时环境 (IcedTea6 1.8.1) (6b18-1.8.1-0ubuntu1~9.10.1)OpenJDK Client VM(build 16.0-b13,混合模式,共享)

Python 是:
Python 2.6.4(r264:75706,2009 年 12 月 7 日,18:45:15)

最佳答案

正如已经指出的那样,纯 Python 真的不是为这类事情而生的。素数检查算法是朴素的也不是重点。然而,通过两件简单的事情,我能够在使用原始算法的同时大大减少 Python 的时间。

首先,将所有内容放入一个函数中,将其命名为 main() 或其他名称。这将我机器上使用 Python 的时间从 20.6 秒减少到 14.54 秒。在全局范围内做事比在函数中做事慢。

其次,使用 Psyco,一个 JIT 编译器。这需要在文件顶部添加两行(当然还需要安装 psyco):

import psyco
psyco.full()

这使最终时间达到 2.77 秒。

最后一点。我决定在此基础上使用 Cython,并将时间降至 0.8533。但是,我不建议普通用户了解如何进行少量更改以使其成为快速的 Cython 代码。

关于python - 优化 python for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com