我试图找到200个标签的序列并返回它们的索引。这是我的第一次尝试,但我确定必须有更好的方法(更快)...如何在列表中找到一系列值的索引?
序列必须是200的倍数,下一个序列小于200然后拒绝它。
This image shows what my code does at the moment with labels at the top and indexes on the bottom
对于信号处理问题。新的python。
indexs = []
zeros = [0]*200
ones = [1]*200
twos = [2]*200
threes = [3]*200
fours = [4]*200
fives = [5]*200
i=0
while i < range(len(labels)):
if i+200 > len(labels):
break
if labels[i:i+len(zeros)] == zeros:
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
if labels[i:i+len(ones)] == ones:
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
if labels[i:i+len(twos)] == twos:
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
if labels[i:i+len(threes)] == threes:
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
if labels[i:i+len(fours)] == fours:
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
if labels[i:i+len(fives)] == fives:
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
i+=1
编辑:
感谢所有反馈人来说是非常赞赏。我想我应该提一下,我正在处理大小为1M +的数组,并且它们大部分都是200的块。因此,我认为while循环可以让我跳过大部分循环。我的计划的一部分是通过对这200个块进行平均来降低维度,但也为分类器创建了许多特征。我在文件http://www.cis.fordham.edu/wisdm/includes/files/sensorKDD-2010.pdf中遵循类似的方法。
下面是类似(但规模较小)产生的数据
labels = [0]*1250+[1]*15400+[0]*12245+[5]*1204*[4]*20045
EDIT2:继承人一些更整洁的代码采取一些你的建议的
def tensequencer(df):
labels = df.activity.as_matrix().tolist()
#find and store all indexs
indexs = []
zeros = [0]*200
ones = [1]*200
twos = [2]*200
threes = [3]*200
fours = [4]*200
fives = [5]*200
numbers = [zeros, ones, twos, threes, fours, fives]
i=0
while i < range(len(labels)):
if i+200 > len(labels):
break
if labels[i:i+200] in numbers :
indexs.extend((range(i,i+len(zeros))))
i+=200
continue
i+=1
#index dataframe
df = df.iloc[indexs,:]
df.index=range(df.shape[0])
return df
好,每个'if'具有完全相同的内容,所以有在那里可能是错的。 – TigerhawkT3
您在此代码中没有初始化**标签**,也没有产生任何输出。不是我们可以重现的东西。 – Prune