第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

用移動窗口的正態(tài)分布替換 nans

用移動窗口的正態(tài)分布替換 nans

紅顏莎娜 2021-05-30 10:30:19
我需要用numpy中的局部正態(tài)分布替換一維數(shù)組的NaN。我選擇一個窗口,計(jì)算該窗口的均值和標(biāo)準(zhǔn)差,然后使用正態(tài)分布替換NaN,而其余信號保持不變。import numpy as npdef replace_nan(signal, window = 5):    """    calculate moving average and std of signal window without nan        replaces nan values with normal distribution (mean, std)        """# add padding in case signal starts/ends with nan    signal = np.pad(signal, (window, window), 'mean', stat_length = 2*window)        for k in range(window,len(signal)-window):                mean = np.nanmean(signal[k-window:k+window])  # window average         std = np.nanstd(signal[k-window:k+window]) # window std without nan         ind = np.where(np.isnan(signal[k-window:k+window]))[0]            print (ind)           signal[ind]= np.random.normal(mean, std)    signal = signal[window:len(signal)-window] #remove padding    return signal#tester signal = np.array([0.71034849, 0.17730998, 0.77577915, 0.38308111, 0.24278947, np.nan, np.nan, 0.68694097, 0.6684736 , 0.47310845, 0.22210945, 0.1189111, np.nan, np.nan, np.nan, 0.5573841 , 0.57531205, 0.74131346, 0.29088101, 0.5573841 , 0.57531205, 0.74131346, np.nan, np.nan, np.nan, np.nan, 0.49534304, 0.18370482, 0.06089498, 0.22210945, 0.1189111])        signal = replace_nan(signal, 5)print(signal)我將 nans 替換為正態(tài)分布 np.random.normal() ,并為大小為 5 的移動窗口計(jì)算均值和標(biāo)準(zhǔn)差。當(dāng)我選擇信號窗口的那些 nans 來替換它們時,出現(xiàn)了問題。這應(yīng)該很容易,我只是python的完整入門者。
查看完整描述

1 回答

?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個贊

我還沒有測試過這些數(shù)字是否準(zhǔn)確,但是我認(rèn)為這會起作用:


import numpy as np


def replace_nan(signal, window = 5):

    """

    calculate moving average and std of signal window without nan

    replaces nan values with normal distribution (mean, std)

    """


    # add padding in case signal starts/ends with nan

    signal = np.pad(signal, (window, window), 'mean', stat_length = 2*window)


    for k in range(window, len(signal) - window + 1):

        mean = np.nanmean(signal[k-window:k+window])  # window average

        std = np.nanstd(signal[k-window:k+window]) # window std without nan


        if np.isnan(signal[k]):

            signal[k] = np.random.normal(mean, std)


    signal = signal[window:len(signal)-window] #remove padding


    return signal


#tester

signal = np.array(

    [

        0.71034849, 0.17730998, 0.77577915, 0.38308111, 0.24278947, np.nan,

        np.nan, 0.68694097, 0.6684736 , 0.47310845, 0.22210945, 0.1189111,

        np.nan, np.nan, np.nan, 0.5573841 , 0.57531205, 0.74131346,

        0.29088101, 0.5573841 , 0.57531205, 0.74131346, np.nan, np.nan,

        np.nan, np.nan, 0.49534304, 0.18370482, 0.06089498, 0.22210945,

        0.1189111

    ]

)


print("Before:")

print(signal)


signal = replace_nan(signal, 5)


print("\nAfter:")

print(signal)

這給出了:


Before:

[ 0.71034849  0.17730998  0.77577915  0.38308111  0.24278947         nan

         nan  0.68694097  0.6684736   0.47310845  0.22210945  0.1189111

         nan         nan         nan  0.5573841   0.57531205  0.74131346

  0.29088101  0.5573841   0.57531205  0.74131346         nan         nan

         nan         nan  0.49534304  0.18370482  0.06089498  0.22210945

  0.1189111 ]


After:

[ 0.71034849  0.17730998  0.77577915  0.38308111  0.24278947  0.35960417

  0.508657    0.68694097  0.6684736   0.47310845  0.22210945  0.1189111

  0.50282732  0.34906067  0.31206557  0.5573841   0.57531205  0.74131346

  0.29088101  0.5573841   0.57531205  0.74131346  0.80133879  0.63122315

  0.49236281  0.35630875  0.49534304  0.18370482  0.06089498  0.22210945

  0.1189111 ]


查看完整回答
反對 回復(fù) 2021-06-01
  • 1 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號