簡體   English   中英

產生重疊序列

[英]Generating overlapping sequences

我有一個包含以下信息的數據集。 timebin變量是數據時間段的標識符。 可以假設時間timebin是唯一的並且沒有任何間隔(即,如果數據包含1和3,則數據將始終包含2)。

timebin,lat,lon
0,9.0,2.0
1,12.0,4.0
2,15.0,6.0
3,18.0,8.0
4,21.0,10.0
5,24.0,12.0
6,27.0,14.0
7,30.0,16.0

我想生成固定長度為l且重疊量為o所有序列。 例如,對於l=4o=2 ,將輸出以下索引組:

[[0,1,2,3], [2,3,4,5], [4,5,6,7]]

這可以使用循環來完成,但是我想知道是否有更優雅,更有效的方式在python中實現?

overlap = 2
data = [0, 1, 2 ,3 ,4, 5 ,6 ,7]
groups = [data[i: i + overlap * 2]  for i in range(len(data) - overlap * 2 + 1)]

使用清單理解:

l = 4
o = 2
e = 7

print([[x for x in range(s, s + l)] for s in range(0, e, o) if s + l <= e + 1])

結果:

[[0, 1, 2, 3], [2, 3, 4, 5], [4, 5, 6, 7]]

提供的其余數據是否以任何方式涉及? 只是從您的問題,您可以生成具有列表推導的序列:

>>> l = 4
>>> o = 2
>>> [[x for x in range(s, s+l)] for s in range(20)[::(l-o)]]
[0, 1, 2, 3], [2, 3, 4, 5], [4, 5, 6, 7], [6, 7, 8, 9], [8, 9, 10, 11],
[10, 11, 12, 13], [12, 13, 14, 15], [14, 15, 16, 17], [16, 17, 18, 19],
[18, 19, 20, 21]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM