Python 无法枚举过浮,但是否有其他方法可以完成此操作?
编辑我有点尴尬-我使用了错误的分隔符。如果我浪费了任何人的时间,我很抱歉!代码现在正在运行,但需要很长时间,所以我可能会在几个小时后回来。谢谢大家 我正在尝试使用来自在线源的代码——并将其应用于csv文件中的时间序列数据。我遇到的错误是当它试图通过“s1”枚举时。我知道我不能枚举浮点数,但我不太确定我是否知道如何解决这个问题,更不用说代码到底需要枚举什么了。我确信我的数据集的格式和他的一样,因为他在github报告中有他的数据集 谢谢你能给我的任何帮助 编辑我忘了包含DTW函数,它现在添加到下面 函数DTW距离Python 无法枚举过浮,但是否有其他方法可以完成此操作?,python,time-series,cluster-analysis,enumerate,Python,Time Series,Cluster Analysis,Enumerate,编辑我有点尴尬-我使用了错误的分隔符。如果我浪费了任何人的时间,我很抱歉!代码现在正在运行,但需要很长时间,所以我可能会在几个小时后回来。谢谢大家 我正在尝试使用来自在线源的代码——并将其应用于csv文件中的时间序列数据。我遇到的错误是当它试图通过“s1”枚举时。我知道我不能枚举浮点数,但我不太确定我是否知道如何解决这个问题,更不用说代码到底需要枚举什么了。我确信我的数据集的格式和他的一样,因为他在github报告中有他的数据集 谢谢你能给我的任何帮助 编辑我忘了包含DTW函数,它现在添加到下面
def DTWDistance(s1, s2,w):
DTW={}
w = max(w, abs(len(s1)-len(s2)))
for i in range(-1,len(s1)):
for j in range(-1,len(s2)):
DTW[(i, j)] = float('inf')
DTW[(-1, -1)] = 0
for i in range(len(s1)):
for j in range(max(0, i-w), min(len(s2), i+w)):
dist= (s1[i]-s2[j])**2
DTW[(i, j)] = dist + min(DTW[(i-1, j)],DTW[(i, j-1)], DTW[(i-1, j-1)])
return math.sqrt(DTW[len(s1)-1, len(s2)-1])
函数LB_Keogh
def LB_Keogh(s1,s2,r):
LB_sum=0
for ind,i in enumerate(s1):
lower_bound=min(s2[(ind-r if ind-r>=0 else 0):(ind+r)])
upper_bound=max(s2[(ind-r if ind-r>=0 else 0):(ind+r)])
if i>upper_bound:
LB_sum=LB_sum+(i-upper_bound)**2
elif i<lower_bound:
LB_sum=LB_sum+(i-lower_bound)**2
return math.sqrt(LB_sum)
调用函数
centroids=k_means_clust(list(time_series),4,10,4)
我得到的错误是:
--------------------------------------------------------------------
TypeError Traceback (most recent
call last)
<ipython-input-50-909588871671> in <module>()
6
7
----> 8 centroids=k_means_clust(list(df),4,10,4)
9
10
<ipython-input-49-f91bbc3a5a04> in k_means_clust(data, num_clust, num_iter, w)
11 closest_clust=None
12 for c_ind,j in enumerate(centroids):
---> 13 if LB_Keogh(i,j,5)<min_dist:
14 cur_dist=DTWDistance(i,j,w)
15 if cur_dist<min_dist:
<ipython-input-48-b5b8e44a435a> in LB_Keogh(s1, s2, r)
1 def LB_Keogh(s1,s2,r):
2 LB_sum=0
----> 3 for ind,i in enumerate(s1):
4
5 lower_bound=min(s2[(ind-r if ind-r>=0 else 0):(ind+r)])
TypeError: 'numpy.float64' object is not iterable
--------------------------------------------------------------------
类型错误回溯(最近的
最后一次呼叫)
在()
6.
7.
---->8质心=k_意味着(列表(df),4,10,4)
9
10
在k_中,是指(数据,num_clust,num_iter,w)
11最近的\u clust=无
12对于c_ind,枚举中的j(质心):
--->13如果LB_Keogh(i,j,5)=0,否则为0:(ind+r)])
TypeError:“numpy.float64”对象不可编辑
您提到试图使用他的数据并运行代码,可以吗?这将允许您运行单元格,而不是复制和粘贴代码,因为它们都在那里。如果您不熟悉jupyter,我建议您这样做,但您也可以通过virtI am使用jupyter在您的计算机上本地安装,谢谢您的回复!我已经解决了我的问题,用Cython重写代码,因为纯python对于这些事情来说太慢了。
centroids=k_means_clust(list(time_series),4,10,4)
--------------------------------------------------------------------
TypeError Traceback (most recent
call last)
<ipython-input-50-909588871671> in <module>()
6
7
----> 8 centroids=k_means_clust(list(df),4,10,4)
9
10
<ipython-input-49-f91bbc3a5a04> in k_means_clust(data, num_clust, num_iter, w)
11 closest_clust=None
12 for c_ind,j in enumerate(centroids):
---> 13 if LB_Keogh(i,j,5)<min_dist:
14 cur_dist=DTWDistance(i,j,w)
15 if cur_dist<min_dist:
<ipython-input-48-b5b8e44a435a> in LB_Keogh(s1, s2, r)
1 def LB_Keogh(s1,s2,r):
2 LB_sum=0
----> 3 for ind,i in enumerate(s1):
4
5 lower_bound=min(s2[(ind-r if ind-r>=0 else 0):(ind+r)])
TypeError: 'numpy.float64' object is not iterable