如何在numpy的另一个函数中调用ndarray?

2024-05-17 14:12:13 发布

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

因此,我尝试为一个学校项目创建一些基本的根查找函数,下面是我的代码:

import numpy as np

x = np.linspace(0, 3)
f = 14 * x * np.exp(x - 2) - 12 * np.exp(x - 2) - 7 * x ** 3 + 20 * x ** 2 - 26 * x + 12

def bolzano(function, lower, upper):
    if function(lower) * function(upper) < 0:
        return True
    else:
        return False


def bisection(function, lower, upper):
    m = (lower + upper) / 2
    while function(m) > 10 ** -6:
        if bolzano(function, lower, m):
            upper = m
        else:
            lower = m
        m = (lower + upper) / 2
    return float(m)


b = bisection(f, 0, 3)
print(b)

但是,当我试图运行它时,我得到了这个错误

Traceback (most recent call last):
  File "C:/Users/user/PycharmProjects/untitled/Test.py", line 31, in <module>
     b = bisection(f, 0, 3)
  File "C:/Users/user/PycharmProjects/untitled/Test.py", line 22, in 
     bisection while function(m) > 10 ** -6:
TypeError: 'numpy.ndarray' object is not callable

我尝试将二分法函数中的元素强制转换为已知的数据类型,但没有成功。大多数关于Ndarray的帖子都是关于。。。嗯,数组,我不使用,所以在那里找不到解决方案。 有什么想法吗


Tags: 函数numpyreturnifdefnpfunctionupper
1条回答
网友
1楼 · 发布于 2024-05-17 14:12:13

问题是您的函数定义f目前不是一个函数。现在只是一个表达。您有两种选择:要么使用SymPy,要么创建一个函数来计算f,这样您就可以简单地使用普通函数调用来调用它,作为f(x),其中x是您的参数,它可以是数组,也可以是单个数字。下面是如何使用第二个选项

import numpy as np
x = np.linspace(0, 3)

def f(x):
    return 14 * x * np.exp(x - 2) - 12 * np.exp(x - 2) - 7 * x ** 3 + 20 * x ** 2 - 26 * x + 12

# bolzano function here

# bisection function here

b = bisection(f, 0, 3)
print(b)
# 1.5

正如@hpaulj所指出的,因为您是在为标量输入计算函数,所以最好使用math.exp而不是np.exp。前者只需要标量输入,而后者也接受向量

相关问题 更多 >