[英]Avoiding for-loop in plotting multiple graphs on a figure
我正在为大约10000次迭代绘制误差函数值,并绘制它们花费大量时间。 我想避免for-loop,如果可能的话,将它们全部绘制在一个图中,但是无论如何都要加快速度。
import time
import matplotlib.pyplot as plt
a = time.time()
for one in range(len(data)):
plt.plot(data[one],"-o")
plt.show()
b = time.time()
print(b-a)
我尝试的是时机:
(plt.plot(data[one],"-o") for one in range(len(data)))
plt.show()
但是它没有显示任何情节。 因此,我的目标是加快绘制速度,并在出现瓶颈的情况下删除for循环。
数据是
data = array([[ 0. , 0. , 0. , 0. , 0. ],
[-43.4, -18. , -10.5, -7.4, -5.7],
[ 25.7, 18.3, 13.8, 10.7, 8.6],
[-25. , -10. , -5.8, -4.2, -3.3],
[ 16.1, 11.5, 8.6, 6.5, 5.1],
[-16.2, -6.4, -3.8, -2.9, -2.4],
[ 9.6, 7.1, 5.2, 3.8, 2.9],
[ -9.1, -3.4, -2. , -1.6, -1.5],
[ 4.7, 3.9, 2.9, 2. , 1.4],
[ -4.5, -1.3, -0.7, -0.8, -0.8]])
如果有关系,可以将x轴视为
n = [i for i in range(5)]
这有点“作弊”,但您可以使用并行处理器包装python函数。 例如,如果您具有8核处理器,则可以使用7核并行运行功能,或者使其速度提高7倍。
import matplotlib.pyplot as plt
from multiprocessing import Pool, cpu_count
def multi_processor(function_name):
# Use max number of system processors - 1
pool = Pool(processes=cpu_count()-1)
pool.daemon = True
results = {}
# for every item in your list of items, start a new process
for one in range(len(data)):
results[one] = pool.apply_async(your_function, args=(data[one]))
# Wait for all processes to finish before proceeding
pool.close()
pool.join()
# Results and any errors are returned
return {your_function: result.get() for your_function, result in results.items()}
def your_function(arg1):
try:
return plt.plot(arg1,"-o")
except Exception as e:
return str(e)
if __name__ == "__main__":
multi_processor("your_function")
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.