由于熊猫在引擎盖下使用Numpy,我很好奇为什么在下面的示例中,直接的Numpy代码(509毫秒)比使用数据帧(6.38秒)执行相同的操作快12倍
# function with numpy arrays
def f_np(freq, asd):
for f in np.arange(21.,2000.,1.):
fi = freq/f
gi = (1+fi**2) / ((1-fi**2)**2 + fi**2) * asd
df['fi'] = fi
df['gi'] = gi
# process each df ...
# function with dataframe
def f_df(df):
for f in np.arange(21.,2000.,1.):
df['fi'] = df.Freq/f
df['gi'] = (1+df.fi**2) / ((1-df.fi**2)**2 + df.fi**2) * df.ASD
# process each df ...
freq = np.arange(20., 2000., .1)
asd = np.ones(len(freq))
df = pd.DataFrame({'Freq':freq, 'ASD':asd})
%timeit f_np(freq, asd)
%timeit f_df(df)
509 ms ± 723 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
6.38 s ± 20.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
您确定在这种特定情况下,速度的差异是由于“使用数据帧的某些操作”造成的吗?我认为速度上的差异是由于您在第一个示例中创建了
fi
和gi
变量并在列上分配了变量,但在第二个示例中您没有这样做。当我在两者中都分配了一个变量时,结果是相似的相关问题 更多 >
编程相关推荐