Python 如何在numpy中将n个连续元素的非零累积和设置为1,其余元素设置为零?

Python 如何在numpy中将n个连续元素的非零累积和设置为1,其余元素设置为零?,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,我有一个由1和0组成的一维numpy数组。我需要根据这些条件将其更改为数组 如果两个1之间的0数小于3,则所有这些0都应设置为1 在生成的数组中,如果连续1的数量小于4,则所有这些1都应设置为0 i、 如果我的数组是 [0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0] 应该改成 [0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0] 然后去 [0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0] 我试过使用移动平均线,但没有用。如果使用

我有一个由1和0组成的一维numpy数组。我需要根据这些条件将其更改为数组

  • 如果两个1之间的0数小于3,则所有这些0都应设置为1
  • 在生成的数组中,如果连续1的数量小于4,则所有这些1都应设置为0
  • i、 如果我的数组是

    [0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,0,1,0]

    应该改成

    [0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0]

    然后去

    [0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0]


    我试过使用移动平均线,但没有用。如果使用核心Python,如何编写通用函数,最好使用
    n
    而不是3,使用
    m
    而不是4?

    l = [0,1,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,1,0]
    
    def split(l):
        res = []
        subres = [l[0]]
        for i in range(len(l) - 1):
            if l[i] == l[i + 1]:
                subres.append(l[i + 1])
            else:
                res.append(subres)
                subres = [l[i + 1]] 
        res.append(subres)       
        return(res)
    
    def setall(l, val):
        for i in range(len(l)):
            l[i] = val
        return(l)    
    
    def recode(l, changeval, replaceval, lenlimit):
        for i in range(len(l) - 1):
            el = l[i + 1]     
            if (el[0] == changeval) & (len(el) < lenlimit) & (i < (len(l) - 2)):
                el = setall(el, replaceval)
            l[i + 1] = el
        return(l)    
    
    def flatten(l):
        res = []
        for el in l:
            res.extend(el)
        return(res)
    
    # starting list
    print(l)
    
    # step 1
    want1 = split(l)
    want1 = flatten(recode(want1, 0, 1, 3))
    print(want1)
    
    # step 2
    want2 = split(want1)
    want2 = flatten(recode(want2, 1, 0, 4))
    print(want2)
    
    #[0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0]
    #[0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0]
    #[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
    
    l=[0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0]
    def拆分(l):
    res=[]
    subres=[l[0]]
    对于范围内的i(透镜(l)-1):
    如果l[i]==l[i+1]:
    子对象追加(l[i+1])
    其他:
    res.append(subres)
    subres=[l[i+1]]
    res.append(subres)
    返回(res)
    def setall(l,val):
    对于范围内的i(len(l)):
    l[i]=val
    返回(l)
    def重新编码(l、changeval、replaceval、lenlimit):
    对于范围内的i(透镜(l)-1):
    el=l[i+1]
    如果(el[0]==changeval)和(len(el)