Не обращая внимания на среднее значение, если в питоне данные содержат ноль

Я пытаюсь создать функцию для расчета скользящего среднего по набору данных. Это функция:

def averaged_rel_track(navg, rel_values, nb, zeroindex):
    #function to average the relative track values for each blade. This is 
    #dependant on the number values specified by the user to average over in a 
    #rolling average
    for blade in range(0,int(nb)):
        av_values=[]
        rel_blade=rel_values[:,blade]
        for rev in range(0,len(rel_blade)):          
            section=rel_blade[rev-int(navg)+1:rev]
            av_value=np.mean(section)
            av_values.append(av_value)

        print av_values

Однако я хотел бы добавить проверку к нему, и я изо всех сил пытаюсь найти лучший способ реализовать это... Если число средних (navg) в скользящей средней, скажем, 24, берется среднее из 23 значений перед указанным элементом и элементом. Однако, если одно из этих 24 значений равно нулю, я хочу, чтобы среднее значение для указанного элемента было равно нулю. Я старался:

def averaged_rel_track(navg, rel_values, nb, zeroindex):
    #function to average the relative track values for each blade. This is 
    #dependant on the number values specified by the user to average over in a 
    #rolling average
    for blade in range(0,int(nb)):
        av_values=[]
        rel_blade=rel_values[:,blade]
        for rev in range(0,len(rel_blade)):          
            section=rel_blade[rev-int(navg)+1:rev]
            av_value=np.mean(section)
            zero_test= np.where(np.any(section==0))
            print zero_test
            if len(zero_test)==0:
                av_value=None
            av_values.append(av_value)
        print av_values

Однако длина zero_test всегда равна 1?

Кто-нибудь может придумать способ исправить этот метод или вообще другой метод?

ура

1 ответ

После комментария @Mr E я решил это, заменив zero_test с просто np.any(section==0), Это гораздо более простой способ сделать это.

Другие вопросы по тегам