【发布时间】:2018-01-10 20:50:02
【问题描述】:
您好,我有一个巨大的值列表,我想找到所有 n 值模式,例如 list[0:30]、list[1:31]。并将每个值与第一个值比较百分比,例如 percent_change(array[0],array[1]), percent_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]
这是从每一行到样本开始的百分比变化,这就是我所说的模式。我可以选择有多少条目可以有一个模式。
希望我现在更清楚...
【问题讨论】:
-
多线程是死胡同,不要追求。潜在的多处理,但理想的方法是循环矢量化。
-
因此,我想将其标记为 numpy,但看起来您只是在使用 python 列表(尽管说您有 np 数组)?
-
实际上此时我没有使用 numpy,只是使用 pandas 而不是返回一个列表。 @roganjosh 如何使用循环矢量化?
-
那么问题就很混乱了。您可以在您的系列中使用滚动窗口,将其保存在 pandas 中。您的示例应该代表您正在尝试做的事情,但猜测一下,您不想将这些数据作为 python 列表提取出来。
-
“返回列表的熊猫”,你的意思是熊猫系列吗?如果是这样,它的行为与 numpy 数组非常相似
标签: python arrays multithreading performance data-analysis