You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CuPy替代Numpy求多项式根时遇AttributeError报错求助

CuPy roots函数报错AttributeError的解决办法

问题原因

Numpy的roots函数支持直接传入Python列表并自动转换为Numpy数组,但CuPy的roots函数要求输入必须是CuPy数组,不能直接处理Python列表。你的代码中coef是Python列表,调用cp.roots(coef)时,函数会尝试访问列表的dtype属性,而列表没有这个属性,因此触发AttributeError。

解决步骤

在调用cp.roots前,将系数列表转换为CuPy数组即可,具体修改如下:

修改后的代码

def root3(xe, ye, xp, yp, cs, c3):
    # Get the roots of a polynomial
    nu = (c3/cs)**2
    A = ye**2
    B = yp**2
    C4 = nu - 1
    C3 = (-2*xp - 2*xe) * C4
    C2 = nu*B - A + (xe**2 + xp**2 + 4*xe*xp) * C4
    C1 = -2 * nu * B * xe + 2 * A * xp + (-2 * xp * xe**2 - 2*xe*xp**2) * C4
    C = nu * B * xe**2 - A * xp**2 + (xe**2 * xp**2)*C4
    coef = [C4, C3, C2, C1, C]
    # 关键:将Python列表转为CuPy数组
    coef = cp.array(coef)
    R = cp.roots(coef) 
        
    return R[cp.isreal(R)]

额外注意

如果xe、ye等输入参数是Numpy数组,建议先转为CuPy数组(使用cp.asarray(xe)),这样所有中间计算都会在CuPy中进行,避免Numpy和CuPy数组混合导致的性能损耗或潜在问题。

内容的提问来源于stack exchange,提问作者Fred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:55:59