Python 几何四舍五入与numpy/量化?

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

我得到了一系列数据,这是一条曲线

我想把它绕成一圈,使它“有台阶”。此外,我希望步骤大致在当前值的10%以内。(另一种说法是,我希望步数以10%的增量增加,即几何增量)

我写了一些迭代的、缓慢的东西:

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**但跳跃有点太大了;我只是在想如何控制步长。。。