Aar*_*ron 5 python numpy derivative differentiation
我不确定在使用 numpy.gradient 时如何指定非均匀间距。
这是 y = x**2 的一些示例代码。
import numpy as np
import matplotlib.pyplot as plt
x = [0.0, 2.0, 4.0, 8.0, 16.0]
y = [0.0, 4.0, 16.0, 64.0, 256.0]
dydx = [0.0, 4.0, 8.0, 16.0, 32.0] # analytical solution
spacing = [0.0, 2.0, 2.0, 4.0, 8.0] #added a zero at the start to get length matching up with y
m = np.gradient(y, spacing)
plt.plot(x, y, 'bo',
x, dydx, 'r-', #analytical solution
x, m, 'ro') #calculated solution
plt.show()
Run Code Online (Sandbox Code Playgroud)
间距数组的长度总是比我想计算梯度的数组少一。添加零以使长度匹配(如在上面的示例代码中)给出了错误的答案,一个点的梯度是无限的。
我无法理解/遵循非均匀间距的 numpy.gradient 文档(https://docs.scipy.org/doc/numpy/reference/generated/numpy.gradient.html)
我应该如何指定点之间的间距?有没有其他方法可以做到这一点?
Numpy 版本 1.9.2
该函数的API相当混乱。对于非均匀间隔的样本点,梯度函数采用点的坐标而不是间距:
\n\n\n\n\nvarargs :标量或数组列表,可选
\n\nf 值之间的间距。所有尺寸的默认统一间距。可以使用以下方式指定间距:
\n\n\n
\n- 单个标量指定所有维度的样本距离。
\n- N 个标量,用于指定每个维度的恒定样本距离。即 dx、dy、dz、\xe2\x80\xa6
\n- N 个数组,用于指定F 的每个维度上的值的坐标。数组的长度必须与相应维度的大小匹配
\n- 具有 2. 和 3. 含义的 N 个标量/数组的任意组合。
\n
我稍微修改了你的例子:
\n\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nx = np.random.rand(10)\nx.sort()\ny = x**2\ndydx = 2*x\n\ndydx_grad = np.gradient(y, x)\n\nplt.plot(x, dydx, \'k-\', label=\'analytical solution\')\nplt.plot(x, dydx_grad, \'ro\', label=\'calculated solution\')\nplt.legend(); plt.xlabel(\'x\'); plt.ylabel(\'dy / dx\'); plt.show(); \nRun Code Online (Sandbox Code Playgroud)\n