有没有办法自动获取数组不同维度的梯度?
Is there a way to automatically get the gradient along the different dimensions of an array?
我正在尝试找到一种方法,在 Matlab 中自动计算函数沿不同维度的梯度。
我找到了梯度函数here,但它需要我为每个维度写下单独的输出变量。
由于我在采样算法的中间计算梯度,我希望梯度计算能够自动缩放更高维度的输入。
基本上,如果 F
是一个向量,我想要:
G = gradient(F)
成为具有单个条目的元胞数组:具有所有梯度值的向量。
但是,如果 F
是二维数组,我希望 G
是一个包含条目 GX
和 GY
的元胞数组,其中 GX
是沿X 方向和 GY
沿 Y 方向的梯度。
像这样的东西就可以了:
nd = sum(size(F)>1);
G = cell(nd,1);
[G{:}] = gradient(F);
nd
是维数(简单地调用 ndims
是不合适的,因为向量在 MATLAB 中有 2 维,任何东西都至少有 2 维)。 [G{:}]
构造将 gradient
的一个输出参数分配给元胞数组的每个元素。
我正在尝试找到一种方法,在 Matlab 中自动计算函数沿不同维度的梯度。
我找到了梯度函数here,但它需要我为每个维度写下单独的输出变量。 由于我在采样算法的中间计算梯度,我希望梯度计算能够自动缩放更高维度的输入。
基本上,如果 F
是一个向量,我想要:
G = gradient(F)
成为具有单个条目的元胞数组:具有所有梯度值的向量。
但是,如果 F
是二维数组,我希望 G
是一个包含条目 GX
和 GY
的元胞数组,其中 GX
是沿X 方向和 GY
沿 Y 方向的梯度。
像这样的东西就可以了:
nd = sum(size(F)>1);
G = cell(nd,1);
[G{:}] = gradient(F);
nd
是维数(简单地调用 ndims
是不合适的,因为向量在 MATLAB 中有 2 维,任何东西都至少有 2 维)。 [G{:}]
构造将 gradient
的一个输出参数分配给元胞数组的每个元素。