2014-12-15 9 views
7

I den Code in IPython Notebook hat eine Sigmoid-Funktion durch die Parameter a gesteuert zu erzeugen, die die Position des Sigmoid Zentrum definiert, und B, die seine Breite definiert:IPython Notebook interaktive Funktion: wie den Schieber Bereich einzustellen

%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()) 

ich wollte Interaktivität für Parameter a und b hinzuzufügen, so dass ich die Funktion, wie unten neu geschrieben:

%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) 

gibt es eine Möglichkeit der Bereich der Schieberegler, um se symmetrisch (zB um Null zu sein) Es scheint mir nicht möglich zu sein, nur den Startwert für die Parameter zu setzen.

Antwort

5

Sie können Widgets manuell erstellen und sie an Variablen in der interactive-Funktion binden. Auf diese Weise sind Sie viel flexibler und können diese Widgets an Ihre Bedürfnisse anpassen.

Dieses Beispiel erstellt zwei verschiedene Schieber und setzt ihren max, min, Schrittgrßenregister und Anfangswert und verwendet sie in der interactive Funktion.

a_slider = widgets.IntSliderWidget(min=-5, max=5, step=1, value=0) 
b_slider = widgets.FloatSliderWidget(min=-5, max=5, step=0.3, value=0) 
w=widgets.interactive(sigmoid_demo,a=a_slider,b=b_slider) 
display(w) 
+0

Danke. Ich sollte diesen zweiten Teil wahrscheinlich zu einer separaten Frage machen, damit ich Ihre Antwort als Antwort für den Bereich wählen kann. – MyCarta

+0

@MyCarta, siehe meine Bearbeitung - hilft das? – cel

+0

Was ich suche, ist eine Möglichkeit, die Werte der Parameter a und b dynamisch zu schreiben, da sie von den Schiebereglern modifiziert werden. Definitiv eine separate Frage, jetzt, wo ich darüber nachdenke. – MyCarta