eturn best
我没有发现运行时间提高。我也尝试了更积极的编译参数设置:
@jit(nopython=True) def closest_func(lat,lon,trkpts,func): ? ? d = 100000.0 ? ? best = -1 ? ? r = trkpts.index ? ? for i in r: ? ? ? ? lati = trkpts.ix[i,'Lat'] ? ? ? ? loni = trkpts.ix[i,'Lon'] ? ? ? ? md = abs(lat - lati) + abs(lon - loni) ? ? ? ? if d > md: ? ? ? ? ? ? #print d, dlat, dlon, lati, loni ? ? ? ? ? ? best = i ? ? ? ? ? ? d = md ? ? return best
这次运行代码时,出现一个错误:
看来,pandas 比 numba 处理代码更智能。
当然,我也能花时间修改数据结构,使 numba 能正确编译(compile)。可是,我为什么要这么干呢??用 numpy 写的代码运行的足够快了。反正,我一直在用 numpy 和 pandas 。为什么不继续用呢?
也有建议我用pypy。这当然有意义,不过...我用的是托管服务器上的 Jupyter?notebooks(注,在线浏览器的 python 交互式开发环境)。我用的是它提供的 python 内核,也即,官方的(regular)Python 2.7.x 内核。并没有提供 Pypy 选择。
也有建议用?Cython。好吧,如果我回头要编译代码?,那我干脆直接用 C 和 C++ 就好了。我用 python,是因为,它提供了基于 notebooks(注:网页版在线开发环境)的交互式特性,可以快速原型实现。这却不是 Cython 的设计目标。
下面关于Python的文章您也可能喜欢,不妨看看:
英文原文:Python Is Not C
|