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.

Лаплас:

Мешковина:

Ответы на вопрос(3)

Ваш ответ на вопрос