una transformada sierra señal serie rápida muestreo muestrear fourier espectro diente analisis python sympy

sierra - transformada de fourier 2d python



Cómo extraer todos los coeficientes en sympy (3)

La forma más fácil es usar Poly

>>> a = Poly(expr, x) >>> a.coeffs() [1, 2*a + 1, 3]

Puede obtener un coeficiente de un término específico usando coeff ();

x, a = symbols("x, a") expr = 3 + x + x**2 + a*x*2 expr.coeff(x) # 2*a + 1

Aquí quiero extraer todos los coeficientes de x, x ** 2 (y así sucesivamente), como;

# for example expr.coefficients(x) # want {1: 3, x: (2*a + 1), x**2: 1}

Hay un método as_coefficients_dict (), pero parece que esto no funciona de la manera que quiero;

expr.as_coefficients_dict() # {1: 3, x: 1, x**2: 1, a*x: 2} expr.collect(x).as_coefficients_dict() # {1: 3, x**2: 1, x*(2*a + 1): 1}


Una cosa que puedes hacer es usar un diccionario de comprensión así:

dict = {x**p: expr.collect(x).coeff(x**p) for p in range(1,n)}

donde n es la potencia más alta + 1. En este caso n = 3. Entonces tendrías la lista [1,2]

Esto daría

dict = {x: (2*a+1), x**2: 1}

A continuación, puede agregar en el término único con

dict[1] = 3

Asi que

dict = {1:3,x:(2*a+1),x**2:1}

También puedes probar:

a = list(reversed(expr.collect(x).as_ordered_terms())) dict = {x**p: a[p],coeff(x**p) for p in range(1,n)} dict[1] = a[0] # Would only apply if there is single term such as the 3 in the example

donde n es la potencia más alta + 1.


all_coeffs() puede ser mejor en algún momento que usar coeffs() para un Poly . La diferencia radica en la salida de estos dos. coeffs() devuelve una lista que contiene todos los coeficientes que tiene un valor e ignora aquellos cuyo coeficiente es 0 mientras que all_coeffs() devuelve todos los coeficientes, incluidos aquellos cuyo coeficiente es cero.

>>> a = Poly(x**3 + a*x**2 - b, x) >>> a.coeffs() [1, a, -b] >>> a.all_coeffs() [1, a, 0, -b]