gpt4 book ai didi

python - 强制二进制数组中的最小间隔

转载 作者:行者123 更新时间:2023-12-04 10:13:01 25 4
gpt4 key购买 nike

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

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

非常感谢任何帮助。

最佳答案

想出一种矢量化方法来做到这一点似乎非常棘手。对于这些情况 numba如果我们仍然想要一种高性能的方法,这可能是一个不错的选择。以下是使用其高效的 @njit 编译模式的方法:

from numba import njit
import numpy as np

@njit
def 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_value
date
1/4/1987 0 0
1/5/1987 1 1
1/6/1987 1 0
1/7/1987 0 0
1/9/1987 0 0
1/10/1987 1 0
1/12/1987 1 0
2/1/1987 1 0
2/2/1987 1 0
2/3/1987 1 0
2/4/1987 1 0
2/6/1987 1 0
2/7/1987 1 1
2/9/1987 0 0
2/10/1987 0 0
2/11/1987 0 0
2/12/1987 1 0
3/2/1987 0 0
3/3/1987 1 0
3/4/1987 1 0
3/6/1987 1 0
3/8/1987 1 0
3/9/1987 1 0
3/11/1987 1 1
3/12/1987 0 0

关于python - 强制二进制数组中的最小间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61232509/

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