你好我有一个庞大的值列表,我想找到所有n个值模式,如list [0:30],list [1:31]。并且每个值与第一个值比较百分比,如percentage_change(array [0],array [1]),percentage_change(array [0],array [2]),一直到模式结束。 在此之后,我想将所有30个值模式存储在一个模式数组中,以便与将来的其他值进行比较。
为此,我必须构建一个函数: 对于此函数,可以通过更改变量numberOfEntries将30个值更改为我的任何选项 对于每个模式,我做10个下一个结果的平均值,并将其存储在具有相同索引的结果数组中
#end point is the end of array
#inputs (array, numberOfEntries)
#outPut(list of Patterns, list of outcomes)
y=0
condition= numberOfEntries+1
#each pattern list
pattern=[]
#list of patterns
Patterns=[]
#outcomes array
outcomes=[]
while (y<len(array)):
i=1
while(i<condition):
#this is percentage change function, I have built it inside to gain speed. Try is used because possibility of 0 division
try:
x = ((float(array[y-(numberOfEntries-i)])-array[y-numberOfEntries])/abs(array[y-numberOfEntries]))*100.00
if x == 0.0:
x=0.000000001
except:
x= 0.00000001
i+=1
pattern.append(x)
#here is the outcomes
outcomeRange = array[y+5:y+15]
outcome.append(outcomeRange)
Patterns.append(pattern)
#clean pattern array
pattern=[]
y+=1
对8559值数组执行此操作,该数组对于我带来的数据量229.6792来说很小。
有一种方法可以使其适应多线程或提高速度的方法吗?
编辑:
为了更好地解释,我有这个ohlc数据:
open high low close volume
TimeStamp
2016-08-20 15:50:00 0.003008 0.003008 0.002995 0.003000 6.351215
2016-08-20 15:55:00 0.003000 0.003008 0.003000 0.003008 6.692174
2016-08-20 16:00:00 0.003008 0.003009 0.002996 0.003001 10.813029
2016-08-20 16:05:00 0.003001 0.003000 0.002991 0.002991 4.368509
2016-08-20 16:10:00 0.002991 0.002993 0.002989 0.002990 6.662944
2016-08-20 16:15:00 0.002990 0.003015 0.002989 0.003015 8.495640
我将其提取为
array=df['close'].values
然后我将这个数组应用于该函数,它将为这个特定的值集返回一个包含这样的列表的列表,
[0.26, 0.03, -0.03, -0.04, ,0.005]
这是从每一行到示例开头的百分比变化,这就是我所说的模式。我可以选择条目可以有多少模式。
希望我现在更清楚......
答案 0 :(得分:2)
首先,我会将def view_images(request):
return render_to_response('gallery/index.html',{
'categories': Category.objects.all(),
'images': Image.objects.all(),
'video': Video.objects.all()
})
循环转换为while
循环,因为for
现在增加得更快。
i
现在,由于for i in range(1,condition):
在内循环中没有变化,您可以从以下位置优化计算:
y
为:
x = ((float(array[y-(numberOfEntries-i)])-array[y-numberOfEntries])/abs(close[y-numberOfEntries]))*100.00
其中x = (float(array[y-(numberOfEntries-i)])-array[y-numberOfEntries]) * z
在<{em> z
循环之前预先计算:
while/for
为什么?
z = 100.00 / abs(close[y-numberOfEntries])
,因此不计算z
并访问abs
数组close
是要除的值的倒数,所以你可以乘以它。乘法比分裂更快。z
上发生,并且必须相应地处理(在z
中包裹整个z +循环事物并在结果发生时将结果设置为try/except
,它应该是当量)所以你的内循环可能是:
x= 0.00000001