如何加速IPython小部件的执行?
我使用Jupyter笔记本中的如何加速IPython小部件的执行?,python,matplotlib,ipywidgets,Python,Matplotlib,Ipywidgets,我使用Jupyter笔记本中的interactive()创建了一个小部件,用于绘制数据(请参见下面的代码)。但是,当我移动滑块时,小部件更新非常慢(大约1 fps) 函数neg(T)和pos(T)内的数据评估大约需要1e-4秒,函数conc(T)内的数据绘图大约需要1e-1秒。那么为什么我的小部件响应如此缓慢?我怎样才能改进它 from scipy import constants from numpy import * import matplotlib.pyplot as plt from
interactive()
创建了一个小部件,用于绘制数据(请参见下面的代码)。但是,当我移动滑块时,小部件更新非常慢(大约1 fps)
函数neg(T)
和pos(T)
内的数据评估大约需要1e-4秒,函数conc(T)
内的数据绘图大约需要1e-1秒。那么为什么我的小部件响应如此缓慢?我怎样才能改进它
from scipy import constants
from numpy import *
import matplotlib.pyplot as plt
from ipywidgets import interact
import time
%matplotlib inline
m_e = m_h = 1.5 * 10**-49
hbar = constants.hbar
k = constants.k / constants.e
E_g = 1.1242
E_v = 0
E_c = E_v + E_g
E_a = E_v + 0.045
E_d = E_c - 0.045
n_a = 10**14
n_d = 10**12
g_a = 4
g_d = 2
E_f = linspace(E_v, E_c, 100)
def neg(T):
start = time.time()
N_c = 2 * 10**-6 * (m_e*k*T/(2*pi*hbar**2))**1.5
n = N_c * exp((E_f-E_c)/(k*T))
N_a_minus = n_a/(1+g_a*exp((E_a-E_f)/(k*T)))
print(time.time()-start)
return n + N_a_minus
def pos(T):
start = time.time()
N_v = 2 * 10**-6 * (m_h*k*T/(2*pi*hbar**2))**1.5
p = N_v * exp((E_v-E_f)/(k*T))
N_d_plus = n_d/(1+g_d*exp((E_f-E_d)/(k*T)))
print(time.time()-start)
return p + N_d_plus
def conc(T):
start = time.time()
plt.plot(E_f, neg(T), E_f, pos(T))
plt.axis([E_v,E_g,10.0**6,10.0**21])
plt.yscale('log')
print(time.time()-start)
interact(conc, T=(50,800,50));
你是把大部分时间浪费在评估你的功能上,还是浪费在绘图本身上?@cel我已经重新表述了我的问题,希望现在问题更清楚了。你能建议我如何改进我的小部件的响应吗?谢谢事实上,我不知道。也许是笔记本的响应时间造成的——你可以试着问一下jupyter的gitter频道的开发者。