谢谢!我从here修改了我的滑动窗口代码,但是它仍然创建了一个比应该少的窗口。你知道吗
如果你想了解更多关于这个问题的信息,我写了关于最初的问题。简而言之,我处理的是一个大文本文件,其中包含具有这种格式的pi的小数位。注意,标题是所有数字,没有字符串。你知道吗
我需要制作一个滑动窗口,使用三个参数(window\u size、step\u size和last\u windowstart)裁剪文件。最后一个窗口开始于最后一个窗口。你知道吗
它可以工作,但应该有238个窗口,而不是237个。你知道吗
我知道lastcounter工作正常,但我不确定lastcounter是否启动。我试过改变它的价值,这绝对是问题的一部分。你知道吗
Xrange也应该是问题的一部分
有没有关于滑动窗口或最后一个窗口的想法?你知道吗
inputFileName = "sample.txt"
import itertools
import linecache
def sliding_window(window_size, step_size, lastwindow_start):
for i in xrange(0, lastwindow_start, step_size):
yield (i, i + window_size)
def PiCrop(window_size, step_size):
f = open(inputFileName, 'r')
first_line = f.readline().split()
Total_Pi_Digits = int(first_line[0])
lastwindow_start = Total_Pi_Digits-(Total_Pi_Digits%window_size)
lastcounter = (Total_Pi_Digits//window_size)*(window_size/step_size)
flags = [False for i in range(lastcounter)]
first_line[0] = str(window_size)
second_line = f.readline().split()
offset = int(round(float(second_line[0].strip('\n'))))
first_line = " ".join(first_line)
f. close()
with open(inputFileName, 'r') as f:
header = f.readline()
data = [line.strip().split(',') for line in f.readlines()]
for counter, window in enumerate(sliding_window(window_size,step_size,lastwindow_start)):
chunk = data[window[0]:window[1]]
with open('PiCrop_{}.txt'.format(counter), 'w') as output:
if (flags[counter] == False):
flags[counter] = True
headerline = float(linecache.getline(inputFileName, window[1]+1)) - offset
output.write(str(window_size) + " " + str("{0:.4f}".format(headerline)) + " " + 'L' + '\n')
for item in chunk:
newline = str("{0:.4f}".format(float(str(item).translate(None, "[]'"))-offset))
output.write(str(newline) + '\n')
PiCrop(1000,500)
您必须添加一个异常来处理其余的异常。你知道吗
假设您有99个pi\u数字,并且希望每个文件中有10个pi\u数字(窗口大小)。但是由于有99个pi\u数字,所以每个窗口中不可能有10个pi\u数字。你知道吗
在前9个窗口中有10个pi\u数字,在最后一个窗口中有9个pi\u数字。你知道吗
这将为我们提供总共10个步长为0的窗口。 由于没有步长,我们需要将其考虑到程序中。你知道吗
让我们使用5的步长。每次都会向上移动5 成对如下:
注意最后一对是(90,99)。这打破了模式。你知道吗
因此,我们添加下面的行“yield(lastwoon\u start,total\u pi\u digits)”来添加最后一对,whi
相关问题 更多 >
编程相关推荐