继续获取错误。float64没有可调用的rint属性

2024-06-02 23:23:23 发布

您现在位置:Python中文网/ 问答频道 /正文

def solveNLEs(xyz0):
    def f(xyz):
        x=xyz[0]
        y=xyz[1]
        z=xyz[2]

        a=x**2 + y**2 - 10
        b=x*y + y*z**2 + 15
        c=y**2 + z - 25

        return np.array([a,b,c])

    xyz=fsolve(f,xyz0)
    x=xyz[0]
    y=xyz[1]
    z=xyz[2]
    return [x,y,z, f(xyz)]
print(np.round(solveNLEs(np.array([2,2,2])),5))

这只是一个简单的函数,用来解一组非线性方程组,但当我试图对答案进行四舍五入时,我发现了这个错误。我知道我需要更改答案的类型,但我不确定如何更改,尝试使用dtype=float或.atype只会抛出其他错误

“ufunc的循环不支持numpy.float64类型的参数0,该参数没有可调用的rint方法”这正是出现的错误消息


Tags: 函数答案类型参数returndef错误np
2条回答

似乎是嵌套数组的舍入导致了问题。您可以在函数内部对单个元素进行取整

from scipy.optimize import fsolve
import numpy as np


def f(xyz):
    x = xyz[0]
    y = xyz[1]
    z = xyz[2]

    a = x**2 + y**2 - 10
    b = x*y + y*z**2 + 15
    c = y**2 + z - 25

    a = np.round(a, 5)
    b = np.round(b, 5)
    c = np.round(c, 5)

    return np.array([a, b, c])


def solve_nles(xyz0):
    xyz = fsolve(f, xyz0)
    x = xyz[0]
    y = xyz[1]
    z = xyz[2]

    x = np.round(x, 5)
    y = np.round(y, 5)
    z = np.round(z, 5)

    return [x, y, z, f(xyz)]

print(solve_nles(np.array([2, 2, 2])))

注意:您也不需要在使用它们的函数中创建函数,定义后所有方法都可以使用它们

这一问题由

from scipy.optimize import fsolve

def solveNLEs(xyz0):
    def f(xyz):
        x=xyz[0]
        y=xyz[1]
        z=xyz[2]

        a=x**2 + y**2 - 10
        b=x*y + y*z**2 + 15
        c=y**2 + z - 25

        return np.array([a,b,c])

    xyz=fsolve(f,xyz0)
    x=xyz[0]
    y=xyz[1]
    z=xyz[2]
    return [np.array([x,y,z]), f(xyz)]

通过将返回值更改为数组本身,它就能够处理测试代码

answer = solveNLEs(np.array([2,2,2]))
print(np.round(answer,5)) 

相关问题 更多 >