免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3030 | 回复: 9
打印 上一主题 下一主题

是因为程序本身的问题还是python太慢?求解释,求优化。 [复制链接]

论坛徽章:
1
巳蛇
日期:2013-11-19 15:47:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-24 18:07 |只看该作者 |倒序浏览
本帖最后由 kitein9t 于 2013-10-25 10:32 编辑

python小白。这段代码执行时间着实太长了,求大家帮帮看看是什么情况啊。

  1. import math,time
  2. testM = []
  3. orgx = []
  4. for i in range(8192):
  5.     orgx.append(1000*(math.sin(i/1000)))
  6. time1 = time.localtime()        
  7. for i in range(200):
  8.     testM.append([])
  9.     for j in range(8192*4):
  10.         testM[i].append(orgx[j%8192])
  11. print(time.localtime().tm_sec-time1.tm_sec)
复制代码
这段代码用了4s的时间才能完成,而在c中不到半秒时间。如何优化?

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
2 [报告]
发表于 2013-10-24 21:32 |只看该作者
本帖最后由 ssfjhh 于 2013-10-25 11:07 编辑

说实话,7-10这四行代码我没看懂,另外第8行还有错误,猜测了一下你的意思,不知道对不对。
  1. import math,time
  2. orgx = [1000*(math.sin(i/1000)) for i in range(8192)]
  3. time1 = time.localtime()
  4. temp = [orgx[j%8192] for j in range(8192*4)]
  5. testM = [temp[:] for i in range(200)]
  6. print(time.localtime().tm_sec-time1.tm_sec)
复制代码

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
3 [报告]
发表于 2013-10-25 09:34 |只看该作者
用cProfile模块分析下

论坛徽章:
1
巳蛇
日期:2013-11-19 15:47:15
4 [报告]
发表于 2013-10-25 10:29 |只看该作者
回复 2# ssfjhh


因为第一次发问,太马虎。 不好意思,已经修正了。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
5 [报告]
发表于 2013-10-25 11:09 |只看该作者
本帖最后由 ssfjhh 于 2013-10-25 11:13 编辑

回复 4# kitein9t


    2楼已经更新,原来的代码也是正确的,这个应该更快。

在我的电脑上的运行平均时间不到0.06秒。

论坛徽章:
0
6 [报告]
发表于 2013-10-25 11:13 |只看该作者
把range换成xrange

论坛徽章:
0
7 [报告]
发表于 2013-10-25 13:25 |只看该作者
2楼正解。
楼主的 9,10 行代码重复跑了200次, 其实只要拷贝200份就行了

论坛徽章:
1
巳蛇
日期:2013-11-19 15:47:15
8 [报告]
发表于 2013-10-25 15:09 |只看该作者
嗯,谢谢指点,虽然这样确实快了。
但是我真是的目的是为了验证赋值速度的,
在实际中赋值的不是重复的数据,
而是实在的随机的东西,
只能一一赋值,不能简单拷贝。
所以该慢还是会慢啊。

论坛徽章:
4
金牛座
日期:2013-10-11 16:12:50卯兔
日期:2014-07-31 09:17:19辰龙
日期:2014-08-08 09:28:02狮子座
日期:2014-09-14 20:32:05
9 [报告]
发表于 2013-10-25 16:02 |只看该作者
回复 8# kitein9t


    不做200份拷贝,而是直接计算,用时也在两秒以内,还好吧?

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
10 [报告]
发表于 2013-11-09 08:30 |只看该作者
range  换成xrange

自己可以查查 range 和 xrange的区别
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP