首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在numpy的另一个函数中调用ndarray?

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

Stack Overflow用户
提问于 2018-12-31 00:59:25
回答 1查看 40关注 0票数 0

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

代码语言:javascript
复制
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)

然而,当我尝试运行它时,我得到了这个错误

代码语言:javascript
复制
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的帖子都是关于...嗯,数组,我不使用它,所以在那里找不到解决方案。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-31 01:04:24

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

代码语言:javascript
复制
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会更好。前者只需要标量输入,而后者也接受向量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53979639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档