2014-12-15 22 views
7

Ho scritto il codice di seguito in ipython notebook per generare una funzione sigmoidale controllato da parametri a che definisce la posizione del centro sigma, e b che definisce la sua larghezza:IPython notebook: come impostare l'intervallo cursore

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

ho voluto aggiungere interattività parametri a e b così ho riscritto la funzione come di seguito:

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

c'è un modo per SE la gamma dei cursori per essere simmetrico (ad esempio attorno allo zero)? Non mi sembra possibile semplicemente impostando il valore iniziale per i parametri.

risposta

5

È possibile creare manualmente i widget e collegarli alle variabili nella funzione interactive. In questo modo sei molto più flessibile e puoi adattare questi widget alle tue esigenze.

Questo esempio crea due diversi cursori e imposta il loro valore massimo, minimo, scalino e valore iniziale e li utilizza nella funzione interactive.

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

Grazie. Probabilmente dovrei rendere questa seconda parte una domanda a parte, quindi potrei scegliere la tua come risposta per la gamma. – MyCarta

+0

@MyCarta, vedere la mia modifica - questo aiuto? – cel

+0

Quello che sto cercando è un modo per riscrivere i valori dei parametri a e b dinamicamente come sono modifcati dai cursori. Sicuramente una domanda separata ora che ci penso. – MyCarta