【问题标题】:IPython notebook interactive function: how to save the updated function parametersIPython notebook 交互函数:如何保存更新的函数参数
【发布时间】:2015-02-14 00:31:33
【问题描述】:

我在 Ipython notebook 中编写了以下代码来生成一个 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 在被滑块修改时动态保存到变量中,以便它们可以在另一个子图或单独的图中使用,并进行进一步的计算。?

我浏览了所有我能找到的交互式小部件示例,但没有看到任何指向该方向的东西(这些小部件相当新,因此它们的文档似乎不像其他功能那样广泛)。对正确方向的任何建议表示赞赏。

【问题讨论】:

    标签: function widget ipython-notebook interactive sliders


    【解决方案1】:

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

    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,但这很痛苦。

    【讨论】:

    • Matt,您的建议有效(FloatSliderWidget,而不是 FloatSlider),因为它允许获得最终参数选择以用于进一步计算。但是动态保存回变量呢?我的意思是——我应该澄清一下,我意识到问题不是很清楚——如果我在这个子图中使用滑块更改参数,我想要另一个使用这些相同参数的子图也可以交互更新?
    • 没关系。我可以通过在 sigmoid_demo 中包含第二个子图来做到这一点
    • IPython master 上的 FloatSlider :-) 你只能在当前的 master cf doc 上执行此操作:nbviewer.ipython.org/github/ipython/ipython/blob/master/…
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多