Ich habe eine Funktion erstellt, die gegebenen Koeffizientenbereiche Polynome mit solchen Koeffizienten konstruiert und eine Liste aller ihrer Wurzeln ausgibt. Numba mag es jedoch nicht. Es ist so:Python Numba Polynom Root Lower Fehler mit Sympy
import math
import numpy as np
import itertools
from numba import jit
from sympy.solvers import solve
from sympy import Symbol
from sympy import Poly
@jit
def polyn(ranges=[[-20,20],[-20,20],[-20,20],[-20,20]],step=4):
l = []
x = Symbol('x')
rangl = [np.linspace(i[0],i[1],math.floor((i[1]-i[0])/step)) for i in ranges]
coeffl = iter(itertools.product(*rangl))
leng = 1
for i in rangl:
leng *= len(i)
for i in range(0, leng):
a = solve(Poly(list(next(coeffl)),x),x)
for j in a:
l.append(j)
return np.array(l)
Wenn ich versuche, dies zu laufen, es gibt eine kryptische: AssertionError: Fehler bei Objekt (Objekt-Modus Frontend) , die ich nicht verstehe ... Kann mir jemand helfen?
Numba wird nicht in der Lage sein, den SymPy-Code zu beschleunigen. Wenn das ein Flaschenhals ist, könnten Sie versuchen, einen numerischen Solver zu verwenden. Eine andere Sache zu versuchen ist, ein allgemeines Kubik (mit symbolischen Koeffizienten) zu lösen und die Werte die allgemeinen Lösungen anzuschließen. – asmeurer
Nein, ich weiß - aber würde es nicht die Iteration einer solchen Operation über ein großes Array beschleunigen? (sympy Lösung) –
Ich bin zweifelhaft, ob es, außer vielleicht, wenn Sie es parallel zu den Nogil-Optionen ausführen würde. – asmeurer