Градиент для элементов массива, находящихся на расстоянии более одного элемента друг от друга

Можно ли получить градиент между двумя точками, которые находятся на расстоянии более одного элемента друг от друга?

Простой массив:

f = np.array([4,5,8,1,5,3,2,5])

Я хочу запрограммировать следующее:

  • На границах: односторонние, как используется np.gradient.

  • Значения рядом с граничными значениями: центральные различия, используемые np.gradient для внутренних точек.

  • Для внутренних точек

    ((i-2)-(i+2))/4

Полученный результат:

f_res = np.array([1,2,0.25,-0.5,-1.5,1,1,3])

Документация для np.gradient: numpy.gradient

🤔 А знаете ли вы, что...
С Python можно создавать кросс-платформенные приложения для Windows, macOS и Linux.


1
51
2

Ответы:

Решено

Вы можете легко вычислить это вручную:

N = 2
out = np.gradient(f)
out[N:-N] = (f[2*N:]-f[:-2*N])/4

Выход:

array([ 1.  ,  2.  ,  0.25, -0.5 , -1.5 ,  1.  ,  1.  ,  3.  ])

Да, можно вычислить градиент между двумя точками, которые находятся на расстоянии более одного элемента друг от друга, но это требует немного большего объяснения в зависимости от контекста:

  1. Математическое определение: В математике градиент обычно относится к вектору частных производных функции. Если у вас многомерный градиент, это вектор, указывающий в направлении наибольшей скорости увеличения функции. Градиент в двух точках обычно обсуждается с точки зрения того, как он изменяется (т. Е. Скорость изменения градиента или разница между градиентами), а не градиент «между» двумя точками.

  2. Конечные разности (числовые производные). Если вы спрашиваете о численном вычислении производной (или скорости изменения) функции, вы можете вычислить ее между любыми двумя точками. Например, если у вас есть значение функции в ( x_1 ) и ( x_2 ), производная конечной разности (аппроксимация производной) между ними равна

    Это называется аппроксимацией секущей линии. Если ( x_1 ) и ( x_2 ) не являются соседними, это дает градиент в большем интервале, а не «мгновенную» скорость изменения.

  3. Векторное поле или поле градиента в пространстве. Если вы имеете дело с векторным полем или полем градиента в пространстве, вы можете определить путь между двумя точками и вычислить, как градиент ведет себя вдоль этого пути. Это включает в себя вычисление интеграла градиента вдоль выбранного пути.

  4. Машинное обучение и нейронные сети. В глубоком обучении градиенты используются для оптимизации (например, обратного распространения ошибки). Если вы думаете о градиентном спуске, вы обычно вычисляете градиенты относительно отдельных параметров, которые обычно являются соседними с точки зрения их положения в пространстве параметров. Однако технически можно было бы учесть разницу в градиентах для параметров, несмежных в пространстве, но это не было бы обычной практикой.

#DestinationDataScience