在二进制数组中强制最小间隔

我有生成二进制信号的时间序列,如下所示:


date    value

1/4/1987    0

1/5/1987    1

1/6/1987    1

1/7/1987    0

1/9/1987    0

1/10/1987   1

1/12/1987   1

2/1/1987    1

2/2/1987    1

2/3/1987    1

2/4/1987    1

2/6/1987    1

2/7/1987    1

2/9/1987    0

2/10/1987   0

2/11/1987   0

2/12/1987   1

3/2/1987    0

3/3/1987    1

3/4/1987    1

3/6/1987    1

3/8/1987    1

3/9/1987    1

3/11/1987   1

3/12/1987   0

我试图找出减少它们数量的方法,以便在 1 之间会有 10 个观察值的固定差距。


date    new_value

1/4/1987    0

1/5/1987    1

1/6/1987    0

1/7/1987    0

1/9/1987    0

1/10/1987   0

1/12/1987   0

2/1/1987    0

2/2/1987    0

2/3/1987    0

2/4/1987    0

2/6/1987    0

2/7/1987    1

2/9/1987    0

2/10/198    0

2/11/198    0

2/12/198    0

3/2/1987    0

3/3/1987    0

3/4/1987    0

3/6/1987    0

3/8/1987    0

3/9/1987    0

3/11/1987   1

3/12/1987   0

非常感谢任何帮助。


慕斯709654
浏览 101回答 1
1回答

湖上湖

看起来想出一种矢量化的方法来做到这一点可能非常棘手。对于这些情况numba,如果我们仍然想要一种高性能的方法,这可能是一个不错的选择。以下是使用其高效的@njit 编译模式的方法:from numba import njitimport numpy as np@njitdef spacing_between_1(a, k):    x = np.zeros(len(a), np.int8)    first_one = np.argmax(a)    x[first_one] = 1    c=0    for i in range(first_one+1, len(x)):        if a[i] == 1 and c >= k:            x[i] = 1            c=0            continue        c +=1    return x对于共享示例,我们将得到:a = df.value.to_numpy()df['new_value'] = spacing_between_1(a, 10)print(df)           value  new_valuedate                       1/4/1987       0          01/5/1987       1          11/6/1987       1          01/7/1987       0          01/9/1987       0          01/10/1987      1          01/12/1987      1          02/1/1987       1          02/2/1987       1          02/3/1987       1          02/4/1987       1          02/6/1987       1          02/7/1987       1          12/9/1987       0          02/10/1987      0          02/11/1987      0          02/12/1987      1          03/2/1987       0          03/3/1987       1          03/4/1987       1          03/6/1987       1          03/8/1987       1          03/9/1987       1          03/11/1987      1          13/12/1987      0          0
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python