潘达斯与Numpy速度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了潘达斯与Numpy速度相关的知识,希望对你有一定的参考价值。

在Pandas使用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)
答案

你确定在这个特定的情况下,速度上的差异是由于 "用数据框架进行一些操作 "吗?我认为速度上的差异是由于你在创建了 figi 变量,并在第一个例子中把变量分配到列上,但在第二个例子中你没有这样做。我在这两个例子中都分配了一个变量,结果也差不多。

import pandas as pd,numpy as np
# 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.):
        fi = freq/f
        gi =  (1+fi**2) / ((1-fi**2)**2 + fi**2) * asd
        df['fi'] = fi
        df['gi'] = gi
        # 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)
#562 ms ± 9.23 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
#569 ms ± 17.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

以上是关于潘达斯与Numpy速度的主要内容,如果未能解决你的问题,请参考以下文章

numpy ufuncs速度与for循环速度

解决阿迪达斯金融危机的Erick Haskell:对风险精准预测和敏感判断是CFO必备技能

独家对话微软顶级代码女神潘正磊:Visual Studio 与 VS Code 的未来走向 | 人物志

独家对话微软顶级代码女神潘正磊:Visual Studio 与 VS Code 的未来走向 | 人物志

numpy 与 matplotlib 的应用

Numpy 与组合生成器:如何加速组合?