Python 几何四舍五入与numpy/量化?
我得到了一系列数据,这是一条曲线 我想把它绕成一圈,使它“有台阶”。此外,我希望步骤大致在当前值的10%以内。(另一种说法是,我希望步数以10%的增量增加,即几何增量) 我写了一些迭代的、缓慢的东西:Python 几何四舍五入与numpy/量化?,python,pandas,numpy,Python,Pandas,Numpy,我得到了一系列数据,这是一条曲线 我想把它绕成一圈,使它“有台阶”。此外,我希望步骤大致在当前值的10%以内。(另一种说法是,我希望步数以10%的增量增加,即几何增量) 我写了一些迭代的、缓慢的东西: def chunk_trades(A): try: last = A[0] except: print(A) raise new = [] for x in A.iteritems(): if not
def chunk_trades(A):
try:
last = A[0]
except:
print(A)
raise
new = []
for x in A.iteritems():
if not last or np.abs((x[1]-last)/last) > 0.1:
new.append(x[1])
last = x[1]
else:
new.append(last)
s = pd.Series(new, index=A.index)
return s
我不想使用这个代码
我正试图找到一种更快的,类似于蟒蛇的方法。我尝试过使用numpy.digitalize(),但我认为这不是我想要的。有什么好办法吗?好的,我认为解决方案应该是:
np.exp(np.around(np.log(np.abs(j)), decimals=1)) * np.sign(j)
映射到对数空间,进行取整,变换回来。为什么不想要
numpy.digitalize
?范围可能是0到无穷大,我不确定如何使其几何化。好的,我刚刚提出了这个:np.exp(round(10*np.log(abs(j))/10),这是一个正确的方向……你也可以说np.exp(np.round(np.log(abs(j),1)))
具有相同的效果。只是保存了另一个除法。顺便说一句,你是不是打算用10**和np.log10来代替?我不知道你能做到。这很好,看起来方向正确。我尝试了10**但跳跃有点太大了;我只是在想如何控制步长。。。