在 python 中实现数据日志的派生
Implementing derivatives of logs of data in python
我们有两个数据列表(向量),y
和 x
,我们可以想象 x
是时间步长 (0,1,2,...) 和y
某些系统 属性 计算了 x.
的每个值
我有兴趣计算 y
的 log
相对于 x,
的 log
的导数,问题是如何在 Python 中执行此类计算?
我们可以从使用 numpy
开始计算日志: logy = np.log(y)
和 logx = np.log(x).
那么我们使用什么方法来区分 dlog(y)/dlog(x)?
想到的一个选项是按以下方式使用 np.gradient()
:
deriv = np.gradient(logy,np.gradient(logx)).
- 这是进行此计算的有效方法吗?
- 有没有不使用
np.gradient
的更好(或等效)替代方案?
在查看 np.gradient
here 的源代码并环顾四周后,您可以看到它在 numpy 1.14 版中发生了变化,因此文档发生了变化。
我有1.11版。所以我认为渐变被定义为 def gradient(y, x) -> dy/dx
if isinstance(x, np.ndarray)
现在但不在版本 1.11
中。我认为 np.gradient(y, np.array(...))
实际上是未定义的行为!
但是,np.gradient(y) / np.gradient(x)
适用于所有 numpy
版本。使用它!
证明:
import numpy as np
import matplotlib.pyplot as plt
x = np.sort(np.random.random(10000)) * 2 * np.pi
y = np.sin(x)
dy_dx = np.gradient(y) / np.gradient(x)
plt.plot(x, dy_dx)
plt.show()
看起来非常像 cos
波
我们有两个数据列表(向量),y
和 x
,我们可以想象 x
是时间步长 (0,1,2,...) 和y
某些系统 属性 计算了 x.
的每个值
我有兴趣计算 y
的 log
相对于 x,
的 log
的导数,问题是如何在 Python 中执行此类计算?
我们可以从使用 numpy
开始计算日志: logy = np.log(y)
和 logx = np.log(x).
那么我们使用什么方法来区分 dlog(y)/dlog(x)?
想到的一个选项是按以下方式使用 np.gradient()
:
deriv = np.gradient(logy,np.gradient(logx)).
- 这是进行此计算的有效方法吗?
- 有没有不使用
np.gradient
的更好(或等效)替代方案?
在查看 np.gradient
here 的源代码并环顾四周后,您可以看到它在 numpy 1.14 版中发生了变化,因此文档发生了变化。
我有1.11版。所以我认为渐变被定义为 def gradient(y, x) -> dy/dx
if isinstance(x, np.ndarray)
现在但不在版本 1.11
中。我认为 np.gradient(y, np.array(...))
实际上是未定义的行为!
但是,np.gradient(y) / np.gradient(x)
适用于所有 numpy
版本。使用它!
证明:
import numpy as np
import matplotlib.pyplot as plt
x = np.sort(np.random.random(10000)) * 2 * np.pi
y = np.sin(x)
dy_dx = np.gradient(y) / np.gradient(x)
plt.plot(x, dy_dx)
plt.show()
看起来非常像 cos
波