我在<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<条码>、<>>>>、<条码>。
I want to find the gradient of A
in the y
dimension. This can be done easily with NumPy:
www.un.org/spanish/ga Ady = np.gradient(A, Y, axis=1)
<代码>Y为<代码>y尺寸中的1D矢量。
但是,如果<代码>,这便成为非属物。 Y无结构。 这就是说,每个固定职位的数据“栏目”<代码>(x, z) = (Xi, Zi)都有一套独特的<代码>y坐标。 例如:
A = np.random.random((10, 10, 10))
X = np.arange(10)
Y = np.sort(np.random.random((10, 10, 10)), axis=1)
Z = np.arange(10)
The result above is a 3D dataset A
, defined on a structured set of X
and Z
coordinates, while the value of the Y
coordinate is unique for every data point (but is of course monotonic in the y
dimension). I want to estimate dA/dy
via finite differences.
基本上,我试图把许多独立栏目分级。 是否有办法用NumPy来宣传这一问题? 我尝试了以下迭代办法,但进展缓慢:
# A is the 3D dataset
# Y is the 3D dataset with shape matching that of A; gives the y-position of each datapoint in A
NX, NY, NZ = A.shape[0], A.shape[1], A.shape[2]
dA_dy = np.zeros((NX, NY, NZ))
for i in range(NX):
for k in range(NZ):
dA_dy[i, :, k] = np.gradient(A[i,:,k], Y[i,:,k])
我还认为,我可以通过执行链条规则而获得聪明:
dA_dy = np.gradient(A, axis=1) / np.gradient(Y, axis=1)
但对于以下简单检验,这种办法并不可行:
g = np.array([1, 5, 6, 10]) # an unstructured coordinate
f = g**2 # function value on the points x
grad1 = np.gradient(f, g) # df/dg
grad2 = np.gradient(f) / np.gradient(g) # df/dg?
我只获得<代码>grad1=grad2,用于少数简单的线性功能,但并非上述功能。 现在我很想知道,从理论上来说,为什么链条规则一般不赞成以有限差异估算的衍生物。