我对N-D数组上的numpy梯度用法感到困惑。我写了一些代码片段来理解它在一维数组上的用法,如下所示:
import numpy as np
import matplotlib.pyplot as plt
# 1-d
t = np.linspace(0, 0.04, 101)
w = 2*np.pi*50
y = np.sin(w*t)
dy = w * np.cos(w*t)
dy_numeric = np.gradient(y, 0.0004, edge_order=1)
plt.plot(t, y, label='f')
plt.plot(t, dy, label='df')
plt.plot(t, dy_numeric, label='df_num')
plt.legend()
plt.show()
上面的例子展示了它是如何工作的以及它的内部关系。但是我不能像下面这样对给定的二维函数做同样的事情:
x = np.linspace(-10, 10, 201)
y = np.linspace(-10, 10, 201)
f = x ** 2 + y ** 2
df_dx = 2 * x
df_dy = 2 * y
# the exact gradient expression of this 2-d function is [2*x, 2*y]
# but how can I use np.gradient to compute its numeric values?
# df_vals = np.gradient(?,?)
1条答案
按热度按时间tv6aics11#
2D代码片段的问题在于
f
根本不是2D代码。如果你尝试print(f.shape)
,你会得到(201,)
。相反,您可以尝试以下方法来获取沿沿着X和Y方向的渐变数值。
正如您可以测试的那样,
f.shape
现在是(201,201)
。