繁体   English   中英

在图形上绘制多个图形时避免for循环

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM