gpt4 book ai didi

python - Python在文件行上实现滑动窗口

转载 作者:行者123 更新时间:2023-12-05 02:58:04 25 4
gpt4 key购买 nike

我正在尝试使用 Python 在 csv 文件的行上实现滑动/移动窗口方法。每行可以有一列,其二进制值是 yesno。基本上,我想要罕见的 yes 噪音。这意味着如果说我们有 3 yes在 5 个窗口中(最多 5 个),请保留它们。但是如果有 1 或 2,让我们将它们更改为 no。我该怎么做?

例如,下面的yes都应该变成no

...
1,a1,b1,no,0.75
2,a2,b2,no,0.45
3,a3,b3,yes,0.98
4,a4,b4,yes,0.22
5,a5,b5,no,0.46
6,a6,b6,no,0.20
...

但在下面,我们保持原样(可以有一个 5 的窗口,其中 3 个是 yes):

...
1,a1,b1,no,0.75
2,a2,b2,no,0.45
3,a3,b3,yes,0.98
4,a4,b4,yes,0.22
5,a5,b5,no,0.46
6,a6,b6,yes,0.20
...

我尝试写一些东西,窗口为 5,但卡住了(未完成):

        window_size = 5 
filename='C:\\Users\\username\\v3\\And-'+v3file.split("\\")[5]
with open(filename) as fin:
with open('C:\\Users\\username\\v4\\And2-'+v3file.split("\\")[5],'w') as finalout:
line= fin.readline()
index = 0
sequence= []
accs=[]
while line:
print(line)
for i in range(window_size):
line = fin.readline()
sequence.append(line)
index = index + 1
fin.seek(index)

最佳答案

您可以使用 collections.deque 并将 maxlen 参数设置为所需的窗口大小,以实现一个滑动窗口,该窗口跟踪最多的是/否标志最近 5 行。在每次迭代中保留一个yeses的计数,而不是在滑动窗口中计算yeses的总和,这样效率更高。当你有一个全尺寸的滑动窗口并且 yeses 的数量大于 2 时,将这些 yeses 的行索引添加到一个集合中,yeses 应该保持原样。在重置输入的文件指针后的第二遍中,如果行索引不在集合中,则将 yeses 更改为 noes:

from collections import deque

window_size = 5
with open(filename) as fin, open(output_filename, 'w') as finalout:
yeses = 0
window = deque(maxlen=5)
preserved = set()
for index, line in enumerate(fin):
window.append('yes' in line)
if window[-1]:
yeses += 1
if len(window) == window_size:
if yeses > 2:
preserved.update(i for i, f in enumerate(window, index - window_size + 1) if f)
if window[0]:
yeses -= 1
fin.seek(0)
for index, line in enumerate(fin):
if index not in preserved:
line = line.replace('yes', 'no')
finalout.write(line)

演示:https://repl.it/@blhsing/StripedCleanCopyrightinfringement

关于python - Python在文件行上实现滑动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59380717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com