私は、彼らが(numpy.hypot)非常に高速かつ最適化され、既存のnumpyの/ scipyのダウンロード機能に固執しようとする:
df['wspeed'] = np.hypot(df.latwind, df.lonwind)
タイミング: 300Kに対する行DF:
In [47]: df = pd.concat([df] * 10**5, ignore_index=True)
In [48]: df.shape
Out[48]: (300000, 2)
In [49]: %paste
def wind_speed(u, v):
return np.sqrt(u ** 2 + v ** 2)
## -- End pasted text --
In [50]: %timeit list(map(wind_speed, df['lonwind'], df['latwind']))
1 loop, best of 3: 922 ms per loop
In [51]: %timeit np.hypot(df.latwind, df.lonwind)
100 loops, best of 3: 4.08 ms per loop
結論:ベクトル化アプローチは230倍高速でした。
def wind_speed(u, v):
# using vectorized approach - column's math instead of scalar
return np.sqrt(u * u + v * v)
df['wspeed'] = wind_speed(df['lonwind'] , df['latwind'])
デモ:
In [39]: df['wspeed'] = wind_speed(df['lonwind'] , df['latwind'])
In [40]: df
Out[40]:
latwind lonwind wspeed
0 4 1 4.123106
1 5 2 5.385165
2 6 3 6.708204
同じベクトル化されたアプローチcelsius()
機能付:あなたがあなた自身のものを書かなければならない場合はには、(代わりにスカラーのベクトル/列での作業)ベクトル化数学を使用しようと
map
を使用したい場合は
def celsius(T):
# using vectorized function: np.round()
return np.round(T - 273, 1)
しかし、変更map'関数 'でしたか? – Hugo