我需要通过循环迭代绘制一个图的子图; 每次迭代都会调用另一个模块(=另一个py文件)中定义的函数,该函数会绘制一对子图.这是我尝试过的 - 唉不起作用:
1)在循环之前,创建一个具有足够行数和2列的图形:
import matplotlib.pyplot as plt
fig, axarr = plt.subplots(nber_rows,2)
Run Code Online (Sandbox Code Playgroud)
2)在循环内部,在迭代编号iter_nber中,调用绘制每个子图的函数:
fig, axarr = module.graph_function(fig,axarr,iter_nber,some_parameters, some_data)
Run Code Online (Sandbox Code Playgroud)
3)有问题的功能基本上是这样的; 每次迭代在同一行上创建一对子图:
def graph_function(fig,axarr,iter_nber,some_parameters, some_data):
axarr[iter_nber,1].plot(--some plotting 1--)
axarr[iter_nber,2].plot(--some plotting 2--)
return fig,axarr
Run Code Online (Sandbox Code Playgroud)
这不起作用.我在循环结束时得到一个空数字.我已经尝试了上面的各种组合,比如只在函数的返回参数中留下axarr,但无济于事.显然我不明白这个图及其子图的逻辑.
任何建议非常感谢.
最近我正在调整我的一些机器学习管道.我决定利用我的多核处理器.我用param运行交叉验证n_jobs=-1.我也对它进行了分析,对我来说是多么的惊喜:最重要的功能是:
{method 'acquire' of 'thread.lock' objects}
Run Code Online (Sandbox Code Playgroud)
由于我的操作,我不确定这是不是我的错Pipeline.所以我决定做一个小实验:
pp = Pipeline([('svc', SVC())])
cv = GridSearchCV(pp, {'svc__C' : [1, 100, 200]}, jobs=-1, cv=2, refit=True)
%prun cv.fit(np.random.rand(1e4, 100), np.random.randint(0, 5, 1e4))
Run Code Online (Sandbox Code Playgroud)
输出是:
2691 function calls (2655 primitive calls) in 74.005 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
83 43.819 0.528 43.819 0.528 {method 'acquire' of 'thread.lock' objects}
1 30.112 30.112 30.112 30.112 {sklearn.svm.libsvm.fit}
Run Code Online (Sandbox Code Playgroud)
我想知道这种行为的原因是什么.如果有可能加快它的速度.