IPython笔记本交互功能:如何保存更新的功能参数

时间:2014-12-15 19:55:44

标签: function widget ipython-notebook interactive sliders

我在Ipython笔记本中编写了下面的代码来生成由参数a控制的sigmoid函数,参数a定义了sigmoid中心的位置,b定义了它的宽度:

%matplotlib inline
    import numpy as np
    import matplotlib.pyplot as plt

def sigmoid(x,a,b):
    #sigmoid function with parameters a = center; b = width
    s= 1/(1+np.exp(-(x-a)/b))
    return 100.0*(s-min(s))/(max(s)-min(s)) # normalize sigmoid to 0-100

x = np.linspace(0,10,256)
sigm = sigmoid(x, a=5, b=1)
fig = plt.figure(figsize=(24,6))
ax1 = fig.add_subplot(2, 1, 1)
ax1.set_xticks([])
ax1.set_xticks([])
plt.plot(x,sigm,lw=2,color='black')
plt.xlim(x.min(), x.max())

我想为参数a和b添加交互性,所以我重新编写了如下函数:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from IPython.html.widgets import interactive
from IPython.display import display

def sigmoid_demo(a=5,b=1):
    x = np.linspace(0,10,256)
    s = 1/(1+np.exp(-(x-a)/(b+0.1))) # +0.1 to avoid dividing by 0
    sn = 100.0*(s-min(s))/(max(s)-min(s)) # normalize sigmoid to 0-100
    fig = plt.figure(figsize=(24,6))
    ax1 = fig.add_subplot(2, 1, 1)
    ax1.set_xticks([])
    ax1.set_yticks([])
    plt.plot(x,sn,lw=2,color='black')
    plt.xlim(x.min(), x.max())

w=widgets.interactive(sigmoid_demo,a=5,b=1)
display(w)

是否可以将修改过的sigmoid函数参数a和b动态保存到变量中,因为它们被滑块修改,因此可以在另一个子图或单独的图中使用它们,并进行进一步的计算。?

我已经浏览了所有可以找到的交互式小部件示例,但没有看到任何指向这个方向的内容(这些小部件相当新,因此对它们的文档似乎并不像其他功能那样广泛)。任何正确方向的建议都值得赞赏。

1 个答案:

答案 0 :(得分:4)

您想手动创建浮动窗口小部件:

from IPython.html.widgets import FloatSlider

# same as before

F1 = FloatSlider(value=5, min=0, max=10)
w=interactive(sigmoid_demo, a=F1, b=7)
display(w)

然后您可以随时访问F1.value,它将是当前的滑块值。

你也可以循环w.widgets,但这很痛苦。