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]