如果你的真理文件,測量文件包含了足夠接近,你可以用這些時間點配對您的數據的時間點:
import numpy as np
# set up dummy data
truthdat = np.arange(25)[:,None]*[0.1,1]
measdat = np.array([[0.01, 0.01], [0.99, 9.99], [2.01,20.05]])
# find the temporal indices which correspond to one another
i_meas,i_truth = np.where(np.isclose(measdat[:,None,0],truthdat[:,0],atol=0.05))
我們所做的是利用數組廣播,使我們能夠比較每次在measdat
中,每次以truthdat
以矢量化的方式。另外請注意,我允許在時間數據上也有一些變化。如果這些完全相同,則可以在np.where
內部使用measdat[:,None,0]==truthdat[:,0]
。
產生的指標給我們配對的數據點:
>>> measdat[i_meas]
array([[ 1.00000000e-02, 1.00000000e-02],
[ 9.90000000e-01, 9.99000000e+00],
[ 2.01000000e+00, 2.00500000e+01]])
>>> truthdat[i_truth]
array([[ 0., 0.],
[ 1., 10.],
[ 2., 20.]])
現在你同樣可以使用np.isclose
與您所選擇的耐受性比較這些數據對第二欄:
# tell if all values are within atol=0.05 absolute error
are_close = np.allclose(measdat[i_meas,1],truthdat[i_truth,1],atol=0.05)
# compute the error for each measured point
abserrors = measdat[i_meas,1] - truthdat[i_truth,1]
並根據需要進行任何其他後期處理。
示例性數據表明,測量點中不存在對於每個整數第二,所以需要一個不重要的'data_timestamps'。 –
@AndrasDeak完成真相就足夠了。這些代表的方式表明他們是。然後,'truth_data [data_timestamps]'選擇正確的參考值以匹配數據。簡單的例子:抽取的真值時間0,1,2,3,...數據時間戳0,1,3然後在位置0,1,3抽取真值數據將被選中,這是正確的。請注意,Q清楚地表明數據時間爲滿秒。最後,我確實非常表面地提到,如何處理真理時間不規律和完整的情況。 –
@PaulPanzer這將是一個很好的例外,我有另一個數據集,我將比較這也將記錄每秒10次,這意味着我不能放棄這些真值。我正在尋找一種方法來將我測量的數據文件中的位置與相應的真值進行比較。我的其他數據文件以更快的速度記錄,不能簡單地使用增量進行比較,因爲它由於軟件缺陷而及時跳過。 – nichollsg