python - 将数组与其差异对齐

标签 python alignment diff

我想使用数组及其一阶导数(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/

相关文章:

python - 如何将 python 的 difflib.unified_diff 的输出应用于原始字符串?

linux - 相同的文本但非零差异

python - 如何从请求中解析 xml?

python - 有没有办法合并两个数据帧并只保留一定数量的出现次数?

html - 将按钮固定到 flexbox 列布局的底部,margin-top :auto not working

html - CSS居中幻灯片图像

css - 将输入 [提交] 与文本字段对齐

mercurial - 在Mercurial上使用外部差异工具

Visual Studio 2017 中的 Python 无法通过搜索路径找到模块

python - 如何表示 scipy.optimization 中变量的界限,其中界限是另一个变量的函数