J0N*_*D03 5 python performance matplotlib
我正在尝试模拟硬币抛掷和利润并在 matplotlib 中绘制图表:
from random import choice
import matplotlib.pyplot as plt
import time
start_time = time.time()
num_of_graphs = 2000
tries = 2000
coins = [150, -100]
last_loss = 0
for a in range(num_of_graphs):
profit = 0
line = []
for i in range(tries):
profit = profit + choice(coins)
if (profit < 0 and last_loss < i):
last_loss = i
line.append(profit)
plt.plot(line)
plt.show()
print("--- %s seconds ---" % (time.time() - start_time))
print("No losses after " + str(last_loss) + " iterations")
Run Code Online (Sandbox Code Playgroud)
最终结果是
--- 9.30498194695 seconds ---
No losses after 310 iterations
Run Code Online (Sandbox Code Playgroud)
为什么运行这个脚本需要这么长时间?如果我更改num_of_graphs为 10000,脚本将永远不会完成。
你会如何优化这个?

您对执行时间的衡量太粗略了。以下允许您测量模拟所需的时间,与绘图所需的时间分开:
它正在使用 numpy。
import matplotlib.pyplot as plt
import numpy as np
import time
def run_sims(num_sims, num_flips):
start = time.time()
sims = [np.random.choice(coins, num_flips).cumsum() for _ in range(num_sims)]
end = time.time()
print(f"sim time = {end-start}")
return sims
def plot_sims(sims):
start = time.time()
for line in sims:
plt.plot(line)
end = time.time()
print(f"plotting time = {end-start}")
plt.show()
if __name__ == '__main__':
start_time = time.time()
num_sims = 2000
num_flips = 2000
coins = np.array([150, -100])
plot_sims(run_sims(num_sims, num_flips))
Run Code Online (Sandbox Code Playgroud)
sim time = 0.13962197303771973
plotting time = 6.621474981307983
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,SIM 时间大大缩短(在我 2011 年的笔记本电脑上大约为 7 秒);绘图时间取决于 matplotlib。
| 归档时间: |
|
| 查看次数: |
5198 次 |
| 最近记录: |