我正在使用Python进行嵌套循环,如下所示。这是一种搜索现有金融时间序列并查找符合某些特征的时间段的基本方法。
在这种情况下,有两个单独但大小相等的数组,分别表示“收盘价”(即资产价格)和“成交量”(即在该期间内交易的资产数量)。对于每个时间段,我想向前查看所有长度在1到
我理解使用NumPy时加速的主要原因之一是解释器在评估任何内容时不需要每次检查操作数类型,只要您将其作为整体操作于数组中(例如
有没有一种方式可以用某种窗口函数替换内部循环,从而导致加速,或者使用
另外,是否有更好的方法来完成此操作(例如,使用C ++编写此循环并使用weave会更快吗)?
在这种情况下,有两个单独但大小相等的数组,分别表示“收盘价”(即资产价格)和“成交量”(即在该期间内交易的资产数量)。对于每个时间段,我想向前查看所有长度在1到
INTERVAL_LENGTH
之间的未来间隔,并查看是否有任何这些间隔具有符合我的搜索条件的特征(在这种情况下,收盘价比率大于1.0001且小于1.5,总成交量大于100)。我理解使用NumPy时加速的主要原因之一是解释器在评估任何内容时不需要每次检查操作数类型,只要您将其作为整体操作于数组中(例如
numpy_array * 2
),但显然下面的代码没有利用这一点。有没有一种方式可以用某种窗口函数替换内部循环,从而导致加速,或者使用
numpy
/ scipy
的其他方式在本机Python中实现大幅加速?另外,是否有更好的方法来完成此操作(例如,使用C ++编写此循环并使用weave会更快吗)?
ARRAY_LENGTH = 500000
INTERVAL_LENGTH = 15
close = np.array( xrange(ARRAY_LENGTH) )
volume = np.array( xrange(ARRAY_LENGTH) )
close, volume = close.astype('float64'), volume.astype('float64')
results = []
for i in xrange(len(close) - INTERVAL_LENGTH):
for j in xrange(i+1, i+INTERVAL_LENGTH):
ret = close[j] / close[i]
vol = sum( volume[i+1:j+1] )
if ret > 1.0001 and ret < 1.5 and vol > 100:
results.append( [i, j, ret, vol] )
print results