|
发表于 2024-6-30 17:19:39
|
显示全部楼层
抱歉,我刚才可能误解了你的代码和问题。让我再仔细看一遍并给出更合适的优化建议。
首先,我们需要确保`List`被正确初始化,再看如何优化代码的执行速度。
### 修复初始化问题
你在`ls`函数里初始化`List`时,似乎缺少了内容。我们假设你要生成一个包含10000个子列表,每个子列表包含100个随机数。
- import time
- import random
- def timer(f):
- def inner(*args, **kwargs):
- t1 = time.time()
- result = f(*args, **kwargs)
- t2 = time.time()
- print(f"{f.__name__} took {t2-t1:.4f} seconds")
- return result
- return inner
- @timer
- def ls():
- global List
- List = [[random.randint(0, 100) for _ in range(100)] for _ in range(10000)]
- @timer
- def f2():
- global List
- for i in List:
- for j in range(len(i)):
- i[j] += 1
- @timer
- def f2_no_op():
- global List
- for i in List:
- for j in i:
- pass
- ls()
- f2()
- f2_no_op()
复制代码
### 优化代码执行速度
1. **初始化 `List`**:使用列表生成表达式来创建列表是较高效的。
2. **`f2`中的操作**:你可以通过NumPy库来加速数值计算,尤其在大规模数据处理时。
如果允许使用第三方库,比如NumPy,可以尝试以下优化:
- import time
- import numpy as np
- def timer(f):
- def inner(*args, **kwargs):
- t1 = time.time()
- result = f(*args, **kwargs)
- t2 = time.time()
- print(f"{f.__name__} took {t2-t1:.4f} seconds")
- return result
- return inner
- @timer
- def ls():
- global List
- List = np.random.randint(0, 100, size=(10000, 100))
- @timer
- def f2():
- global List
- List += 1 # 矢量化操作
- @timer
- def f2_no_op():
- global List
- pass # 无操作仅用于计时
- ls()
- f2()
- f2_no_op()
复制代码
这样使用NumPy库进行矢量化操作可以显著提升性能。对于无操作的版本,确保代码逻辑保持一致,如有任何进一步细节需要说明,请告知。希望这些建议可以帮助你达到加速效果,如果还有问题,随时问我!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|