Функция gradient
Функция gradient вычисляет численный градиент многомерного массива. Градиент - это вектор частных производных функции по каждому измерению. Функция полезна при анализе данных, обработке изображений и решении дифференциальных уравнений.
Первым параметром передаётся массив, для которого вычисляется градиент. Вторым параметром varargs можно задать расстояние между точками вдоль каждой оси. Параметр edge_order определяет точность вычислений на границах (1 или 2). Параметр axis позволяет указать оси, вдоль которых вычисляется градиент.
Синтаксис
np.gradient(arr, [varargs], [edge_order], [axis])
Пример
Вычислим градиент одномерного массива с шагом 1:
import numpy as np
arr = np.array([1, 2, 4, 7, 11])
res = np.gradient(arr)
print(res)
Результат выполнения кода:
[1. 1.5 2.5 3.5 4. ]
Градиент вычисляется как разность соседних значений: центральная разность во внутренних точках и односторонняя разность на границах.
Пример
Рассмотрим пример с неединичным шагом между точками:
import numpy as np
arr = np.array([1, 3, 6, 10])
res = np.gradient(arr, 0.5)
print(res)
Результат выполнения кода:
[4. 5. 7. 8.]
Указание второго параметра 0.5 означает, что точки отстоят друг от друга на 0.5, что влияет на вычисление градиента.
Пример
Вычислим градиент двумерного массива:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
gx, gy = np.gradient(arr)
print("Gradient along rows:")
print(gx)
print("Gradient along columns:")
print(gy)
Результат выполнения кода:
Gradient along rows:
[[3. 3. 3.]
[3. 3. 3.]
[3. 3. 3.]]
Gradient along columns:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
Функция возвращает кортеж массивов, где каждый массив - градиент вдоль соответствующей оси. Первый массив - градиент по строкам (ось 0), второй - по столбцам (ось 1).
Пример
Используем параметр edge_order для повышения точности на границах:
import numpy as np
arr = np.array([1, 2, 4, 8])
res1 = np.gradient(arr, edge_order=1)
res2 = np.gradient(arr, edge_order=2)
print("edge_order=1:", res1)
print("edge_order=2:", res2)
Результат выполнения кода:
edge_order=1: [1. 2. 3. 4.]
edge_order=2: [1. 1.5 3. 5. ]
При edge_order=2 на границах используется более точная разностная схема второго порядка, что даёт более точное приближение производной.
Пример
Вычислим градиент только вдоль указанной оси:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6]])
res = np.gradient(arr, axis=1)
print(res)
Результат выполнения кода:
[[1. 1. 1.]
[1. 1. 1.]]
Параметр axis=1 указывает, что градиент вычисляется только вдоль столбцов (горизонтальное направление).