¿Cómo calculo el derivado de una matriz en Python?

¿Cómo calculo la derivada de una matriz, y (digamos), con respecto a otra matriz, x (digamos) – ambas matrices de un determinado experimento? por ejemplo, y = [1,2,3,4,4,5,6] y x = [.1,.2,.5,.6,.7,.8,.9] ; Quiero conseguir dy/dx !

Utilice numpy.diff

Si dx es constante

 from numpy import diff dx = 0.1 y = [1, 2, 3, 4, 4, 5, 6] dy = diff(y)/dx print dy array([ 10., 10., 10., 0., 10., 10.]) 

dx no es constante (tu ejemplo)

 from numpy import diff x = [.1, .2, .5, .6, .7, .8, .9] y = [1, 2, 3, 4, 4, 5, 6] dydx = diff(y)/diff(x) print dydx [10., 3.33333, 10. , 0. , 10. , 10.] 

Tenga en cuenta que este “derivado” aproximado tiene un tamaño n-1 donde n es el tamaño de su matriz / lista.

No sé qué está tratando de lograr, pero aquí hay algunas ideas.
Si está tratando de hacer una diferenciación numérica, quizás la formulación de diferencias finitas pueda ayudarlo mejor. La solución anterior es como una aproximación de precisión de primer orden para el esquema directo de diferencias finitas con una cuadrícula / matriz no uniforme.

Supongo que esto es lo que quisiste decir:

 >>> from __future__ import division >>> x = [.1,.2,.5,.6,.7,.8,.9] >>> y = [1,2,3,4,4,5,6] >>> from itertools import izip >>> def pairwise(iterable): # question 5389507 ... "s -> (s0,s1), (s2,s3), (s4, s5), ..." ... a = iter(iterable) ... return izip(a, a) ... >>> for ((a, b), (c, d)) in zip(pairwise(x), pairwise(y)): ... print (d - c) / (b - a) ... 10.0 10.0 10.0 >>> 

Pregunta 5389507 enlace

Es decir, defina dx como la diferencia entre elementos adyacentes en x .

numpy.diff (x) calcula

La diferencia entre elementos adyacentes en x

Al igual que en la respuesta por @tsm. Como resultado, obtienes una matriz que es 1 elemento más corta que la original. Por supuesto, esto tiene sentido, ya que solo puede comenzar a calcular las diferencias con el primer índice (se necesita 1 “elemento histórico”).

 >>> x = [1,3,4,6,7,8] >>> dx = numpy.diff(x) >>> dx array([2, 1, 2, 1, 1]) >>> y = [1,2,4,2,3,1] >>> dy = numpy.diff(y) >>> dy array([ 1, 2, -2, 1, -2]) 

Ahora puede dividir esas 2 matrices resultantes para obtener el derivado deseado.

 >>> d = dy / dx >>> d array([ 0.5, 2. , -1. , 1. , -2. ]) 

Si por alguna razón necesita un crecimiento relativo (a los valores de y), puede hacerlo de la siguiente manera:

 >>> d / y[:-1] array([ 0.5 , 1. , -0.25 , 0.5 , -0.66666667]) 

Interprete como 50% de crecimiento, 100% de crecimiento, -25% de crecimiento, etc.

Código completo:

 import numpy x = [1,3,4,6,7,8] y = [1,2,4,2,3,1] dx = numpy.diff(x) dy = numpy.diff(y) d = dy/dx