- 主题:就统计一下循环执行了多少次,要200多个小时?如何优化啊?
from time import time as Now
t = Now()
sum=0
for i in range(0,1027):
if (i % 100 == 0):
print("i = ", i)
for j in range(i+1,1028):
for k in range(j+1,1029):
#for l in range(k+1,1029):
sum= sum+1
print("sum = ",sum)#三重循环的次数是 sum = 181062154,用时 15.6秒。 四个数的循环次数是 sum = 46442442501 = C(10269,4),耗时一个小时
print(f"np:{Now()-t}")
这段代码,三重循环的次数,就是C(1029,3) 组合数。四重循环的次数,就是C(1029,4)。三重循环用时15.6秒,四重循环要一个多小时。五重循环的话,要C(1029,5)/C(1029,4)=200+,难道我就统计一下循环执行的次数,要200多个小时吗?有没有可以改进的方法啊?我还要做其他运算呢。谢谢
就跑一下这个程序,cpu根本没用满,才50%不到。如何让cpu满负荷工作啊?
--
修改:feng321 FROM 120.242.253.*
FROM 120.242.253.*
用多cpu,或者gpu,可能加速吗?
--
FROM 120.242.253.*
用新版python
【 在 feng321 的大作中提到: 】
: 用多cpu,或者gpu,可能加速吗?
--
FROM 121.33.161.*
Accelerate Python code 100x by import taichi as ti
https://docs.taichi-lang.org/blog/accelerate-python-code-100x
py3.10 是3.4s
用taichi 是0.044s
【 在 feng321 的大作中提到: 】
: 用多cpu,或者gpu,可能加速吗?
--
修改:iMx FROM 121.33.161.*
FROM 121.33.161.*
本来就是这样的呀,而且这段代码也只能单线程跑,你要是16核,估计占用率连10%都到不了。
要想快得优化算法,特化定制或自动适应。要不还搞那么多稀疏矩阵什么算法什么的干啥。
要么就改成并行多线程。多核CPU不是你随便写一段就能自动提速的,哪有那么简单的好事。
【 在 feng321 的大作中提到: 】
:
: from time import time as Now
: t = Now()
: sum=0
: for i in range(0,1027):
#发自zSMTH@SM-G9960
--
FROM 223.104.53.*
Python效率这么低,换c++或者fortran
【 在 feng321 的大作中提到: 】
: from time import time as Now
: t = Now()
: sum=0
: for i in range(0,1027):
: if (i % 100 == 0):
: print("i = ", i)
: for j in range(i+1,10
: ..................
发自「今日水木 on LIO-AN00」
--
FROM 223.74.66.*
python里,执行大数相乘,或者大整数除法,时间都可以忽略不计,近似等于0. 关键的时间消耗还是在n重循环上。1029*1029*1029的三重循环,竟然耗掉了我60秒。这个如何加速啊?
【 在 sysumove 的大作中提到: 】
: Python效率这么低,换c++或者fortran
: 发自「今日水木 on LIO-AN00」
![单击此查看原图](//static.mysmth.net/nForum/att/Python/167063/527/middle)
--
FROM 120.242.253.*
你去掉print再试试呗
【 在 feng321 的大作中提到: 】
: from time import time as Now
: t = Now()
: sum=0
: ...................
--
FROM 61.149.247.163
【 在 feng321 的大作中提到: 】
: 这个是计算什么 消耗 3.4s啊?我英文不太好,谢谢指点
--
FROM 121.33.161.*