相关疑难解决方法(0)

通过循环和函数填充matplotlib子图

我需要通过循环迭代绘制一个图的子图; 每次迭代都会调用另一个模块(=另一个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,但无济于事.显然我不明白这个图及其子图的逻辑.

任何建议非常感谢.

python matplotlib subplot

9
推荐指数
1
解决办法
2万
查看次数

为什么GridSearchCV在'方法'获取''thread.lock'对象}上花费的时间超过50%?

最近我正在调整我的一些机器学习管道.我决定利用我的多核处理器.我用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)

我想知道这种行为的原因是什么.如果有可能加快它的速度.

python scikit-learn

8
推荐指数
1
解决办法
3538
查看次数

标签 统计

python ×2

matplotlib ×1

scikit-learn ×1

subplot ×1