2017-04-07 59 views
-1

我想以5秒的間隔爲我的樣本數據中的信號數據計算平均值VAL1,VAL2和SIGNAL值。換句話說,使用包含的樣本數據,我想計算第一個數據點(在這種情況下)01:45:18到01:45:22,01:45:23到01的平均值: 45:27,01:45:28到01:45:32和01:45:33通過剩下的數據。隨着時間的推移的平均數據?

理想情況下,我想存儲在變量,如平均的信息:dec_average,ra_average和n_average

我如何能做到這一點的任何建議或想法?這是我迄今爲止的代碼。

import sys 
import os 
import matplotlib.pyplot as plt 
from matplotlib.dates import strpdate2num 
import numpy as np 
import matplotlib.colors 
import matplotlib.cm 

sat_id,dec,ra,n = np.loadtxt("mydata.asc", usecols=(3,5,7,9), unpack=True) 

樣本數據:
時間戳:一時45分18秒02 SATID VAL1 36 VAL2 188信號34
時間戳:1時45分19秒02 SATID VAL1 36 VAL2 188信號34
時間戳:01: 45:20 SATID 02 VAL1 36 VAL2 188信號35
時間戳:1點45分21秒02 SATID VAL1 36 VAL2 188信號34
時間戳:1點45分22秒02 SATID VAL1 36 VAL2 188信號35
時間戳:01 :45:23 SATID 02 VAL1 36 VAL2 188 SIGNAL 35
時間戳p:01:45:24 SATID 02 VAL1 36 VAL2 188 SIGNAL 36
Timestamp:01:45:25 SATID 02 VAL1 36 VAL2 188 SIGNAL 35
Timestamp:01:45:26 SATID 02 VAL1 36 VAL2 188 SIGNAL 36
時間戳:1時45分27秒02 SATID VAL1 37 VAL2 188信號36
時間戳:1點45分28秒02 SATID VAL1 37 VAL2 188信號36
時間戳:1點45分29秒02 SATID VAL1 37 VAL2 188信號36
時間戳:一點45分三十秒SATID 02 VAL1 38 VAL2 188信號37
時間戳:1時45分31秒02 SATID VAL1 38 VAL2 188信號36
時間戳:1時45分32秒02 SATID VAL1 39 VAL2 188 SIGNAL 37
時間戳:1點45分33秒02 SATID VAL1 39 VAL2 188信號37
時間戳:1點45分34秒02 SATID VAL1 39 VAL2 188信號37
時間戳:1時45分35秒02 SATID VAL1 39 VAL2 188 SIGNAL 38

+0

什麼是您的數據的格式?一個數據幀,一個矩陣?請不要加載文本文件,您可以發佈一個最小再現示例嗎? –

+0

可能的重複:http://stackoverflow.com/questions/13728392/moving-average-or-running-mean –

回答

0

第一步是捕捉每個條目的重要數據,這是VAL1VAL2SIGNAL值,你已經做了。

然後,對於每組五個條目,您需要獲取每個字段的平均值,這可以通過只添加字段的每個值然後除以五來完成。使用numpy這可以通過只使用np.average()並傳入要平均的數組來實現,在我們的例子中,這將是第一次的第一個五個元素,接下來的五個第二個,等等,對於dec這可以做如下。

我們將創建一個列表dec_average來存儲每組條目的平均值。

dec_average = [] 

這將通過dec陣列運行時,平均每一套五行只要有至少五個左,和平均附加到dec_average

for i in range(5, len(dec) + 1, 5): 
    dec_average.append(np.average(dec[(i - 5):i])) 

一旦我們完成通過循環運行,如果數組中元素的個數並不五的倍數,那麼還是會有一些留下來的平均水平。爲了獲得平均值,我們需要得到最後的x項,其中x是數組長度除以5的餘數;因此,模量。

if (len(dec)) % 5 != 0: 
    dec_average.append(np.average(dec[-(len(dec) % 5):])) 

把這些三段代碼共同作用的結果,在計算每五個項目的列表的平均的系統,如果有少於五個項目留在最後,剛開剩餘的平均值,並將每個平均值附加到一個數組。這可以擴展以適應其他數據條目。

+0

謝謝Wintro ...這個令人難以置信的詳細和徹底的解釋確實讓事情變得非常清晰。我真的很感激花時間來解釋它如此完美和徹底 – luke

+0

我的榮幸!我建議查看丹尼爾的答案,並提出/接受適合您的任何答案。 –

0

從Alleo的回答here

def running_mean(x, N): 
    cumsum = numpy.cumsum(numpy.insert(x, 0, 0)) 
    return (cumsum[N:] - cumsum[:-N])/N 
+0

如果它是重複的,請將其標記爲重複,而不是複製(即使歸因)答案。 – MSeifert

相關問題