有没有办法自动获取数组不同维度的梯度?

Is there a way to automatically get the gradient along the different dimensions of an array?

我正在尝试找到一种方法,在 Matlab 中自动计算函数沿不同维度的梯度。

我找到了梯度函数here,但它需要我为每个维度写下单独的输出变量。 由于我在采样算法的中间计算梯度,我希望梯度计算能够自动缩放更高维度的输入。

基本上,如果 F 是一个向量,我想要: G = gradient(F) 成为具有单个条目的元胞数组:具有所有梯度值的向量。 但是,如果 F 是二维数组,我希望 G 是一个包含条目 GXGY 的元胞数组,其中 GX 是沿X 方向和 GY 沿 Y 方向的梯度。

像这样的东西就可以了:

nd = sum(size(F)>1);
G = cell(nd,1);
[G{:}] = gradient(F);

nd 是维数(简单地调用 ndims 是不合适的,因为向量在 MATLAB 中有 2 维,任何东西都至少有 2 维)。 [G{:}] 构造将 gradient 的一个输出参数分配给元胞数组的每个元素。