
Python 语言为什么执行速度相当慢???不是一般的慢!!
代码功能:1--400万之间找素数。分别用C,Java,Python语言实现,算法相同,三种语言用时测试结果如下:C语言用时:96秒。Java:用时:128秒。Pytho...
代码功能:1--400万之间找素数。分别用C ,Java , Python 语言实现,算法相同,三种语言用时测试结果如下:
C语言用时:96秒。
Java:用时: 128秒。
Python 用时 : 8929 秒 (约2.48小时)
Python 为什么如此之慢呢????
硬件: 处理器:Intel Core i7 , Memory: 8G
PYTHON代码:
import time
start=time.clock()
prime=[]
prime.append(2)
n=1
i=1
for k in range(3, 4000000):
j=0
while ((j<n) and ( k % prime[j]!=0)):
j+=1
if (j==n):
prime.append(k)
i+=1
n+=1
k=k+2
end=time.clock()
print "done!"
print prime
print end-start
程序功能:1--400万之间找素数。
分别用C ,Java , Python 语言实现,算法相同,三种语言用时测试结果如下:
C语言用时:96秒。
Java:用时: 128秒。
Python 用时 : 8929 秒 (约2.48小时)
Phthon 为什么如此之慢呢????
C代码:
#include <iostream>
using namespace std;
int main()
{
const int MAX=4000000, SIZE=283146;
//const long MAX=100, SIZE=30;
int prime[SIZE]={0};
int i,j,k,n;
prime[0]=2;
n=1;
i=1;
k=3;
clock_t start,finish;
double totaltime;
start=clock();
do
{
j=0;
while ((j<n) && ( k % prime[j]!=0))
j++;
if (j==n)
{
prime[i]=k;
i++;
n++;
}
k=k+2;
}while(k<MAX);
finish=clock();
totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
cout << "All primes in 2 ~ " << MAX << "are:";
for (i=0;i< SIZE ;i++)
{
cout<<"\t" << prime[i];
if ((i+1)% 10==0) cout<<"\n";
}
cout << "\n";
cout <<"n="<< n<<"\n";
cout <<"\n此程序的运行时间为"<<totaltime<<"秒!"<< endl;
}
JAVA代码:
public class Prime_array {
public static void main(String[] args)
{
final int MAX=4000000, SIZE=283146;
int prime[]=new int [SIZE];
int i,j,k,n;
prime[0]=2;
n=1;
i=1;
k=3;
String str="";
long starTime=System.currentTimeMillis();
do
{
j=0;
while ((j<n) && ( k % prime[j]!=0))
j++;
if (j==n)
{
prime[i]=k;
i++;
n++;
//j=0;
}
k=k+2;
}while(k<MAX);
long endTime=System.currentTimeMillis();
long Time=endTime-starTime;
System.out.println("All primes in 2~" + MAX + "are:");
for (i=0;i< SIZE ;i++)
{
System.out.print("\t" + prime[i]);
if ((i+1)% 10==0) System.out.println();
}
System.out.println();
System.out.println("n="+ n);
System.out.println("程序运行时间:"+ Time/1000);
}
} 展开
C语言用时:96秒。
Java:用时: 128秒。
Python 用时 : 8929 秒 (约2.48小时)
Python 为什么如此之慢呢????
硬件: 处理器:Intel Core i7 , Memory: 8G
PYTHON代码:
import time
start=time.clock()
prime=[]
prime.append(2)
n=1
i=1
for k in range(3, 4000000):
j=0
while ((j<n) and ( k % prime[j]!=0)):
j+=1
if (j==n):
prime.append(k)
i+=1
n+=1
k=k+2
end=time.clock()
print "done!"
print prime
print end-start
程序功能:1--400万之间找素数。
分别用C ,Java , Python 语言实现,算法相同,三种语言用时测试结果如下:
C语言用时:96秒。
Java:用时: 128秒。
Python 用时 : 8929 秒 (约2.48小时)
Phthon 为什么如此之慢呢????
C代码:
#include <iostream>
using namespace std;
int main()
{
const int MAX=4000000, SIZE=283146;
//const long MAX=100, SIZE=30;
int prime[SIZE]={0};
int i,j,k,n;
prime[0]=2;
n=1;
i=1;
k=3;
clock_t start,finish;
double totaltime;
start=clock();
do
{
j=0;
while ((j<n) && ( k % prime[j]!=0))
j++;
if (j==n)
{
prime[i]=k;
i++;
n++;
}
k=k+2;
}while(k<MAX);
finish=clock();
totaltime=(double)(finish-start)/CLOCKS_PER_SEC;
cout << "All primes in 2 ~ " << MAX << "are:";
for (i=0;i< SIZE ;i++)
{
cout<<"\t" << prime[i];
if ((i+1)% 10==0) cout<<"\n";
}
cout << "\n";
cout <<"n="<< n<<"\n";
cout <<"\n此程序的运行时间为"<<totaltime<<"秒!"<< endl;
}
JAVA代码:
public class Prime_array {
public static void main(String[] args)
{
final int MAX=4000000, SIZE=283146;
int prime[]=new int [SIZE];
int i,j,k,n;
prime[0]=2;
n=1;
i=1;
k=3;
String str="";
long starTime=System.currentTimeMillis();
do
{
j=0;
while ((j<n) && ( k % prime[j]!=0))
j++;
if (j==n)
{
prime[i]=k;
i++;
n++;
//j=0;
}
k=k+2;
}while(k<MAX);
long endTime=System.currentTimeMillis();
long Time=endTime-starTime;
System.out.println("All primes in 2~" + MAX + "are:");
for (i=0;i< SIZE ;i++)
{
System.out.print("\t" + prime[i]);
if ((i+1)% 10==0) System.out.println();
}
System.out.println();
System.out.println("n="+ n);
System.out.println("程序运行时间:"+ Time/1000);
}
} 展开
3个回答
展开全部
java和c都是编译型语言,一个是解释型语言。
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。
当然更多的是与算法有关而不是语言。你python代码换成这个看看,速度是不是比你快多了
def primes1(n):
""" Returns a list of primes < n """
sieve = [True] * (n/2)
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i/2]:
sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
return [2] + [2*i+1 for i in xrange(1,n/2) if sieve[i]]
import time
start = time.time()
a = primes1(4000000)
end = time.time()
print a
print 'used time:' end-start
编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。
解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。
当然更多的是与算法有关而不是语言。你python代码换成这个看看,速度是不是比你快多了
def primes1(n):
""" Returns a list of primes < n """
sieve = [True] * (n/2)
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i/2]:
sieve[i*i/2::i] = [False] * ((n-i*i-1)/(2*i)+1)
return [2] + [2*i+1 for i in xrange(1,n/2) if sieve[i]]
import time
start = time.time()
a = primes1(4000000)
end = time.time()
print a
print 'used time:' end-start
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没仔细看,只说一点:把python的range改成xrange
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得是Python团队水平不够好。其实Java也有解释模式,Python也有编译模式。但是Python的编译过程和编译的成果都很慢。
如果说是动态类型的锅,正版的Matlab也能做到跟C++有得一比的水平。
Java快是因为Java有大量的维护团队和大企业在运维。Matlab虽然用量很少,但是利润比Java更高得多,所以也有足够的资金去维护。
Python是免费的,利润没有Matlab那么高,也没有Java那么多的支持者。
一个很公平的对比就是Matlab和Octave的性能对比,同样是Matlab语言的解释器,商业化的Matlab可以跟C++做到差不多快,而且平台还大到炸;开源的Octave没什么吊 炸 天的功能,居然比Python还慢三分。
可以推断运行速度和语言本身是没有很大关系的,是解释器的开发和运营者的能力使然。
如果说是动态类型的锅,正版的Matlab也能做到跟C++有得一比的水平。
Java快是因为Java有大量的维护团队和大企业在运维。Matlab虽然用量很少,但是利润比Java更高得多,所以也有足够的资金去维护。
Python是免费的,利润没有Matlab那么高,也没有Java那么多的支持者。
一个很公平的对比就是Matlab和Octave的性能对比,同样是Matlab语言的解释器,商业化的Matlab可以跟C++做到差不多快,而且平台还大到炸;开源的Octave没什么吊 炸 天的功能,居然比Python还慢三分。
可以推断运行速度和语言本身是没有很大关系的,是解释器的开发和运营者的能力使然。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询