2013-09-25 25 views
0

我看过numpy/scipy文档,但是我找不到任何内建函数来执行此操作。Numpy/Scipy将原始值转换为索引时间序列吗?

我想将表示从其原始状态到索引序列的时间序列(即第一个值为100,随后的值根据第一个原始值进行缩放)的原始数据(温度,因为它发生)进行转换。因此,如果原始值为(15,7.5,5),则索引值将为(100,50,33)(心智计算,因此为int值)。

这是比较容易编码自己,但我想尽可能使用内置。一个自制是:

def indexise(seq,base=0,scale=100): 
    if not base: 
     base=seq[0] 
    return (i*scale/base for i in seq) 

回答

1

如果seq是numpy的数组,然后代替(i*scale/base for i in seq),你可以使用一个numpy的量化操作scale*seq/base

下面是我可能会修改你的函数:

import numpy as np 

def indexise(seq, base=None, scale=100): 
    seq = np.asfarray(seq) 
    if base is None: 
     base = seq[0] 
    result = scale*seq/base 
    return result 

例如,

In [14]: indexise([15, 7.5, 5, 3, 10, 12]) 
Out[14]: 
array([ 100.  , 50.  , 33.33333333, 20.  , 
     66.66666667, 80.  ]) 

In [15]: indexise([15, 7.5, 5, 3, 10, 12], base=10) 
Out[15]: array([ 150., 75., 50., 30., 100., 120.]) 
+0

酷,谢谢!我很惊讶没有这样的事情了。 – Marcin

+0

对不起Marcin,我从来没有打算引起进攻我没有看到你刚才阅读和评论你的评论的观点。 – Greg

+0

@Greg你不需要告诉人们接受答案,特别是当问题是新的。我通常会等到有一个完美的答案(这里提供一个内建函数),或者在接受最好的答案前几天给它。 – Marcin