Python 在图形上绘制多个图形时避免for循环
我正在绘制大约10000次迭代的错误函数值,绘制它们需要很多时间。 如果可能的话,我想避免for循环,将它们全部绘制在一个图形中,但无论如何都要加快速度Python 在图形上绘制多个图形时避免for循环,python,performance,for-loop,matplotlib,plot,Python,Performance,For Loop,Matplotlib,Plot,我正在绘制大约10000次迭代的错误函数值,绘制它们需要很多时间。 如果可能的话,我想避免for循环,将它们全部绘制在一个图形中,但无论如何都要加快速度 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
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()
为了避免循环,您可以进行
plt.plot(范围(5),data.T)
。对于for循环,阵列的转置为每个循环478 ms±35.2 ms(平均±标准偏差7次,每个循环1次),对于不同的计时,每个循环11.7 ms±2.24 ms(平均±标准偏差7次,每个循环100次),请参阅,但我不知道这里提到的任何其他选项是否适用于您的案例。我尝试使用LineCollection,但得到了ValueError:在我堆叠数据和n之后,所有输入数组必须具有相同的形状。但是当我使用time.time时,你的第一条评论速度提高了10倍,它们是~400ms到~40ms。正如你可能理解的,早期的计时是从jupyter开始的。我假设我们已经用完了矩阵和线集合,可以使用NAN吗?这无疑是有用的,我稍后会使用它(在学习之后),但到目前为止,我正在做的作业将在有限的库中进行测试。我认为这现在没有用。你真的测试过这个吗?它会产生一个单独的绘图还是5个?不,我没有针对这个问题测试它,但我已经在其他函数上测试过很多次了。我没有绘制一些东西,而是使用print语句来演示并行处理功能。通用版本在这里还可以,我建议用一个实际的绘图来测试它,因为根据我的经验,多处理会产生新的进程,这些进程在分离后无法合并到单个输出绘图中。如果我弄清楚在哪里放置数据
变量,我会尝试。我正在使用一个新文件。得到TypeError:your_函数()接受1个位置参数,但给出了5个