我在 Ipython 笔记本中编写了下面的代码来生成由参数 a 控制的 sigmoid 函数,该参数定义 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 动态保存到变量中,以便它们可以在另一个子图或单独的图中使用,并进行进一步的计算。
我浏览了所有我能找到的交互式小部件示例,但没有看到任何指向该方向的东西(这些小部件相当新,因此它们的文档似乎不像其他功能那样广泛)。任何正确方向的建议表示赞赏。