我試圖找到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