【问题标题】:Cannot find plot function in GPy library (python)在 GPy 库(python)中找不到绘图函数
【发布时间】:2016-07-13 09:12:01
【问题描述】:

我正在使用 Python 2.7 中的 GPy 库来执行高斯过程回归。我首先遵循 GitHub 页面中提供的教程笔记本。

示例代码:

import numpy as np
import matplotlib.pyplot as plt

f = lambda x : np.sin(x**2)

kernel = GPy.kern.RBF(input_dim=1, variance=1., lengthscale=1.)

X=np.random.rand(2,1)
Y=f(X)

m = GPy.models.GPRegression(X,Y,kernel)
m.optimize_restarts(num_restarts = 10,verbose=False)

fig=m.plot()
plt.show()

我目睹的奇怪的事情是 GPRegression 类中没有实现 plot 函数(好吧,它只是 的一个小子类>GP.),也不是它的超类 (GP),也不是它的超超类 (Model).. . 全部位于 GPy.core 中。

我调用 m.plot() 时执行的绘图函数在 GPy.plotting.gpy_plot 中(不包含任何类,但仍使用“self”关键字作为函数参数 - 但也许它只是函数参数的“坏”名称?)。

我看不到 GPy.core.GP 对象如何访问这个绘图函数(乍一看,两个 python 文件之间没有任何链接 - Ctrl+F "plot" in GPy/core/gp.py 没有给出任何例子)。

当我打电话时

vars(GPy.models.gp_regression.GP).keys()

,绘图功能确实有,虽然在GPy.core.GP中没有直接实现。

同样的事情:(最小的可重现示例)

import GPy.core.gp
import GPy.likelihoods
import GPy.kern
import matplotlib.pyplot as plt

GPy.core.gp.GP.__dict__.keys()

了解如何 GP 调用gpy_plot 中的绘图函数,以及为什么 以这种方式编码?

【问题讨论】:

    标签: python python-2.7 gpy


    【解决方案1】:

    绘图库在 GPy/GPy/plotting/__init__.py 的 inject_plotting() 中“注入”。这是plot() 的行:

        from ..core import GP
        ...
        GP.plot = gpy_plot.gp_plots.plot
    

    我认为这种设计的原因是它允许通过change_plotting_library() 轻松更改绘图库on-the-fly

    【讨论】:

    • 感谢您的回答。只是为了弄清楚: 1. 在这个 _init_ 文件中,创建了 GP.plot 函数,这意味着 GP 类的所有实例 将(只要这行代码执行) 有这个绘图对象方法。我对吗 ? 2.这段代码什么时候执行?一旦我初始化了一个 GP 对象,比如说 m,另一个文件夹的 _init_.py 文件怎么会被执行?谢谢
    • GP.plot 的赋值修改了class object,因此实例可以访问plot()。 (即使在创建实例之后修改了类对象,这仍然有效。) __init__.py 在import 上执行。例如,import GPy.core.gp 执行 GPy/__init__.py 和 GPy/core/__init__.py。而前者有from . import plotting
    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2022-07-26
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多