numpy вторая производная многомерного массива
У меня есть набор данных моделирования, где я хотел бы найти самый низкий уклон в n измерениях. Интервал данных постоянен по каждому измерению, но не все одинаково (я мог бы изменить это для простоты).
Я могу жить с некоторой числовой неточностью, особенно по краям. Я бы предпочел не создавать сплайн и использовать этот производный; просто на необработанных значениях будет достаточно.
Можно рассчитать первую производную сnumpy
с использованиемnumpy.gradient()
функция.
import numpy as np
data = np.random.rand(30,50,40,20)
first_derivative = np.gradient(data)
# second_derivative = ??? <--- there be kudos (:
Это комментарий относительно Лапласа по сравнению с гессенской матрицей; это больше не вопрос, а призван помочь пониманию будущих читателей.
Я использую в качестве тестового примера 2D-функцию для определения «плоской» области ниже порога. На следующих рисунках показана разница в результатах между использованием минимумаsecond_derivative_abs = np.abs(laplace(data))
и минимум из следующего:
second_derivative_abs = np.zeros(data.shape)
hess = hessian(data)
# based on the function description; would [-1] be more appropriate?
for i in hess[0]: # calculate a norm
for j in i[0]:
second_derivative_abs += j*j
Цветовая шкала отображает значения функций, стрелки показывают первую производную (градиент), красная точка - точку, ближайшую к нулю, и красная линия - порог.
Функция генератора для данных была( 1-np.exp(-10*xi**2 - yi**2) )/100.0
с XI, YI генерируется сnp.meshgrid
.
Лаплас:
Мешковина: