亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在二進制數組中強制最小間隔

在二進制數組中強制最小間隔

慕斯709654 2022-10-11 21:40:58
我有生成二進制信號的時間序列,如下所示:date    value1/4/1987    01/5/1987    11/6/1987    11/7/1987    01/9/1987    01/10/1987   11/12/1987   12/1/1987    12/2/1987    12/3/1987    12/4/1987    12/6/1987    12/7/1987    12/9/1987    02/10/1987   02/11/1987   02/12/1987   13/2/1987    03/3/1987    13/4/1987    13/6/1987    13/8/1987    13/9/1987    13/11/1987   13/12/1987   0我試圖找出減少它們數量的方法,以便在 1 之間會有 10 個觀察值的固定差距。date    new_value1/4/1987    01/5/1987    11/6/1987    01/7/1987    01/9/1987    01/10/1987   01/12/1987   02/1/1987    02/2/1987    02/3/1987    02/4/1987    02/6/1987    02/7/1987    12/9/1987    02/10/198    02/11/198    02/12/198    03/2/1987    03/3/1987    03/4/1987    03/6/1987    03/8/1987    03/9/1987    03/11/1987   13/12/1987   0非常感謝任何幫助。
查看完整描述

1 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

看起來想出一種矢量化的方法來做到這一點可能非常棘手。對于這些情況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


查看完整回答
反對 回復 2022-10-11
  • 1 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號