numpy zweite Ableitung eines eindimensionalen Arrays

Ich habe eine Reihe von Simulationsdaten, bei denen ich die niedrigste Steigung in n Dimensionen finden möchte. Der Abstand der Daten ist in jeder Dimension konstant, aber nicht alle gleich (ich könnte ihn der Einfachheit halber ändern).

Ich kann mit einer gewissen numerischen Ungenauigkeit leben, besonders in Richtung der Ränder. Ich würde es vorziehen, keinen Spline zu generieren und dieses Derivat zu verwenden. nur auf die rohwerte wäre ausreichend.

s ist möglich, die erste Ableitung mit @ zu berechnnumpy Verwendung dernumpy.gradient() Funktion.

import numpy as np

data = np.random.rand(30,50,40,20)
first_derivative = np.gradient(data)
# second_derivative = ??? <--- there be kudos (:

Dies ist ein Kommentar zu Laplace im Vergleich zur hessischen Matrix. dies ist keine frage mehr, sondern soll das verständnis zukünftiger leser verbessern.

Ich benutze eine 2D-Funktion als Testfall, um den 'flachsten' Bereich unter einem Schwellenwert zu bestimmen. Die folgenden Bilder zeigen den Unterschied in den Ergebnissen zwischen der Verwendung des Minimums vonsecond_derivative_abs = np.abs(laplace(data)) und das Minimum der folgenden:

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

Die Farbskala zeigt die Funktionswerte, die Pfeile zeigen die erste Ableitung (Gradient), der rote Punkt den Punkt, der am nächsten an Null liegt, und die rote Linie den Schwellenwert.

Die Generatorfunktion für die Daten war( 1-np.exp(-10*xi**2 - yi**2) )/100.0 mit xi, yi wird mit @ generienp.meshgrid.

Laplace:

Hessian:

Antworten auf die Frage(6)

Ihre Antwort auf die Frage