自然对数转换 np.log1p
区别与np.log;np.log1p(x)
函数计算的是 log(1 + x)
使用 np.log1p
而不是直接使用 np.log
的原因是避免对0进行对数运算,因为 np.log(0)
的结果为负无穷
举个例子:
我想计算成交数据里 买/卖单的数量/变化率,如下处理:
def buy_increasing( trade, n=100):
trade['v'] = trade['notional'] * trade['side']
v = trade.v.copy()
v[v<0] = 0
return np.log1p(((v.rolling(2*n).sum() + 1) / (v.rolling(n).sum() + 1)).fillna(1))
def sell_increasing(depth, trade, n=100):
v = trade.v.copy()
v[v>0] = 0
return np.log1p(((v.rolling(2*n).sum() - 1) / (v.rolling(n).sum() - 1)).fillna(1))