`np.gradient` 对于非均匀间距具有高方差

问题描述 投票:0回答:1

对于相对平滑的数据,我在

np.gradient
中遇到了高方差。

假设我们要计算

dx/dt
:

import numpy as np
import matplotlib.pyplot as plt
x = np.array([13.11149679, 13.2141427 , 13.37743691, 13.3934357 , 13.56163066,
       13.60207566, 13.69304133])
t = np.array([0.73065159, 0.74012055, 0.75911018, 0.7607452 , 0.77811468,
       0.78031837, 0.79046324])
x_grad = np.gradient(x, t)

plt.plot(t[1:], np.diff(x) / np.diff(t), 'xb', label="findiff")
plt.plot(t, x_grad, 'or', label = 'np.gradient')
plt.plot(t, x, '+g', label = "x")
plt.xlabel('t')
plt.ylabel('x')
plt.legend()
plt.show()

数据中的噪音似乎被放大了很多。我们该如何处理这个问题?

python numpy numerical-methods
1个回答
0
投票

根据注释

np.gradient()
计算每个点的二阶近似值,边界除外。

np.diff(x) / np.diff(t)
计算每个间隔(n-1 个值)的斜率,而
gradient()
在每个点(n 个值)进行估计,产生相应左右间隔斜率之间的中间值。使用
edge_order
参数的默认值时,两种方法的边界值相同。

© www.soinside.com 2019 - 2024. All rights reserved.