gpt4 book ai didi

python - 将数组与其差异对齐

转载 作者:行者123 更新时间:2023-12-01 04:18:50 25 4
gpt4 key购买 nike

我想使用数组及其一阶导数(diff)作为训练特征。由于 diff 数组的尺寸较小,我想将其填满,这样当我堆叠它们并将两者用作功能时,就不会出现尺寸问题。

如果我用 0 填充 diff(array),我应该如何对齐它们?我应该将 0 放在生成的 diff(array) 的开头还是末尾?将数组与其导数对齐的正确方法是什么?例如在Python中:

a  = [1,32,43,54]
b = np.diff(np.array(a))

np.insert(b, -1, 0) # at the end?
np.insert(b, 0, 0) # or at the beginning?

最佳答案

您可以使用中心有限差分(相当于取左侧和右侧差异的平均值)来代替左侧或右侧有限差分,然后用适当的近似值填充两端那里的衍生品。这将使导数的估计与其数据值保持一致,并且通常会给出更好的导数估计。

例如,

In [33]: y = np.array([1, 2, 3.5, 3.5, 4, 3, 2.5, 1.25])

In [34]: dy = np.empty(len(y))

In [35]: dy[1:-1] = 0.5*(y[2:] - y[:-2])

In [36]: dy[0] = y[1] - y[0]

In [37]: dy[-1] = y[-1] - y[-2]

In [38]: dy
Out[38]: array([ 1. , 1.25 , 0.75 , 0.25 , -0.25 , -0.75 , -0.875, -1.25 ])

以下脚本使用 matplotlib 创建导数估计的可视化:

plot

import numpy as np
import matplotlib.pyplot as plt

y = np.array([1, 2, 3.5, 3.5, 4, 3, 2.5, 1.25])
dy = np.empty(len(y))
dy[1:-1] = 0.5*(y[2:] - y[:-2])
dy[0] = y[1] - y[0]
dy[-1] = y[-1] - y[-2]


plt.plot(y, 'b-o')
for k, (y0, dy0) in enumerate(zip(y, dy)):
t = 0.25
plt.plot([k-t, k+t], [y0 - t*dy0, y0 + t*dy0], 'c', alpha=0.4, linewidth=4)

plt.grid()
plt.show()

有更复杂的工具用于估计导数(例如 scipy.signal.savgol_filter 有一个用于估计导数的选项,如果您的数据是周期性的,您可以使用 scipy.fftpack.diff ),但是简单的有限差分可能可以很好地作为您的训练输入。

关于python - 将数组与其差异对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com