def update(frame): # 根据时间选择点的位置 # index = np.where(time <= time[frame])[0][-1] # sc.set_offsets([x[index], y[index]]) x=data.loc[data['label']==frame]['position_x'] y=data.loc[data['label']==frame]['position_y'] offsets = np.column_stack((x, y)) sc.set_offsets(offsets) return sc, # 创建动画 ani = FuncAnimation(fig, update, frames=100, interval=20, blit=True) 这段代码为什么这么慢,怎么优化
时间: 2024-03-15 08:45:47 浏览: 179
python3中datetime库,time库以及pandas中的时间函数区别与详解
这段代码执行慢可能是因为数据量较大,每帧都需要重新计算点的位置。可以考虑将数据预处理,把每个时间点对应的位置提前计算好,然后在动画过程中直接调用预处理好的结果即可。这样可以减少计算量,提高代码执行效率。
另外,可以考虑使用缓存来存储计算结果,避免重复计算,提高性能。具体实现方式可以使用 Python 的装饰器来实现。例如,使用 `functools.lru_cache` 装饰器来缓存函数的结果:
```python
import functools
@functools.lru_cache(maxsize=None)
def calculate_positions(label):
x = data.loc[data['label']==label]['position_x']
y = data.loc[data['label']==label]['position_y']
return np.column_stack((x, y))
```
然后在 `update` 函数中调用 `calculate_positions` 函数来获取点的位置:
```python
def update(frame):
offsets = calculate_positions(frame)
sc.set_offsets(offsets)
return sc,
```
这样可以大大提高代码执行效率。
阅读全文