gpt4 book ai didi

Python Numba 多项式根降低误差与 Sympy

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:36 26 4
gpt4 key购买 nike

我创建了一个函数,在给定系数范围的情况下,用这些系数构造多项式并输出所 Root过的列表。然而,Numba 不喜欢这样。是这样的:

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)

当我尝试运行它时,它输出一个神秘的: AssertionError:对象失败(对象模式前端)我不明白...任何人都可以帮忙吗?

最佳答案

您的代码中有很多 Numba 当前无法处理的内容。第一个是构建 rangl 的列表理解:

[np.linspace(i[0],i[1],math.floor((i[1]-i[0])/step)) for i in ranges]

您应该将其替换为 NumPy 解决方案,例如:

rangl = np.empty((len(ranges), step))
for i in ranges:
rangl[i] = np.linspace(i[0],i[1],math.floor((i[1]-i[0])/step))

Numba 无法处理的第二件事是 itertools.product。您也可以将其替换为 NumPy 和 for 循环。

一般来说,尝试通过注释掉代码的下部来减少代码,直到 Numba 接受它,然后从上到下工作,看看哪些部分无法编译。有条不紊,一步一步进行,并尝试坚持简单的构造,例如简单的 for 循环和数组。

关于Python Numba 多项式根降低误差与 Sympy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47844944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com