Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何确保滑动窗口创建的窗口数量正确?_Python_Text_Iterator_Full Text Search_Sliding Window - Fatal编程技术网

Python 如何确保滑动窗口创建的窗口数量正确?

Python 如何确保滑动窗口创建的窗口数量正确?,python,text,iterator,full-text-search,sliding-window,Python,Text,Iterator,Full Text Search,Sliding Window,谢谢!我修改了我的滑动窗口代码,但它仍然创建了一个少于应有的窗口 如果你想了解更多关于这个问题的信息,我在那里写了关于最初问题的文章。简言之,我正在处理一个大文本文件,其中包含具有这种格式的pi的小数点。请注意,标题是所有数字,没有字符串 我需要制作一个滑动窗口,使用三个参数(window\u size、step\u size和last\u windowstart)裁剪文件。last_WindowsStart是最后一个窗口的开始位置 它可以工作,但应该有238个窗口,而不是237个 我知道las

谢谢!我修改了我的滑动窗口代码,但它仍然创建了一个少于应有的窗口

如果你想了解更多关于这个问题的信息,我在那里写了关于最初问题的文章。简言之,我正在处理一个大文本文件,其中包含具有这种格式的pi的小数点。请注意,标题是所有数字,没有字符串

我需要制作一个滑动窗口,使用三个参数(window\u size、step\u size和last\u windowstart)裁剪文件。last_WindowsStart是最后一个窗口的开始位置

它可以工作,但应该有238个窗口,而不是237个

我知道lastcounter工作正常,但我不确定lastwindow\u是否启动。我尝试过改变它的价值,这肯定是问题的一部分

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_数字,并且希望每个文件中有10个pi_数字(窗口大小)。但是由于有99个pi_数字,每个窗口中不可能有10个pi_数字

前9个窗口中有10个pi_数字,最后一个窗口中有9个pi_数字

这为我们提供了总共10个步长为0的窗口。 由于没有步长,我们需要将其考虑到程序中

让我们使用5的步长。这将使该对每次向上移动5 以下是几对:

  • (0,10)
  • (5、15)
  • (10、20)
  • (15、25)
  • (20、30)
  • (25、35)
  • (30、40)
  • (35、45)
  • (40、50)
  • (45、55)
  • (50、60)
  • (55、65)
  • (60、70)
  • (65、75)
  • (70、80)
  • (75,85)
  • (80、90)
  • (85,95)
  • (90,99)
注:最后一对为(90,99)。这打破了这种模式

因此,我们添加以下行“收益率(lastwindow_start,total_pi_digits)”来添加最后一对,即

def sliding_window(window_size, step_size, lastwindow_start,total_pi_digits):
    for i in xrange(0, lastwindow_start, step_size):
        yield (i, i + window_size)
yield (lastwindow_start, total_pi_digits)