【问题标题】:'only length-1 arrays can be converted to Python scalars' error'只有长度为 1 的数组可以转换为 Python 标量' 错误
【发布时间】:2021-12-05 11:36:22
【问题描述】:

我有这样的 Python 代码

import numpy as np
import matplotlib.pyplot as plt
import math
from scipy import optimize as opt

def func1(x):
    f1 = math.exp(x-2)+x**3-x
    return f1

solv1_bisect = opt.bisect(func1, -1.5, 1.5)

x1 = np.linspace(-1.5,1.5) 
y1 = func1(x1)
plt.plot(x1,y1,'r-')
plt.grid()

print('solv1_bisect = ', solv1_bisect)

我收到了错误消息,例如

TypeError: only length-1 arrays can be converted to Python scalars

请帮我解决,谢谢!

【问题讨论】:

  • 下次尝试更好地介绍您正在尝试做的事情,它可能对其他人有所帮助。
  • 当您遇到此类错误时,请注意它们发生的位置。向我们展示traceback,完整的错误消息。在这种情况下,它指向math.exp 行。您是否花时间查找该功能?在发布问题之前检查文档。

标签: python numpy bisect


【解决方案1】:

问题是您使用的math.exp 需要 Python 标量,例如:

>>> import numpy as np
>>> import math
>>> math.exp(np.arange(3))  

Traceback (most recent call last):
  File "path", line 3331, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-10-3ac3b9478cd5>", line 1, in <module>
    math.exp(np.arange(3))
TypeError: only size-1 arrays can be converted to Python scalars

改用np.exp

def func1(x):
    f1 = np.exp(x - 2) + x ** 3 - x
    return f1

np.expmath.exp 之间的区别在于 math.exp 可以处理 Python 的数字(浮点数和整数),而 np.exp 可以处理 numpy 数组。在您的代码中,参数 x 是一个 numpy 数组,因此会出现错误。

【讨论】:

  • 天哪,它有效!非常感谢!但是 math.exp 和 np.exp 有什么不同呢?
  • @YYen 补充说明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 2014-09-27
  • 2013-03-15
  • 1970-01-01
  • 2016-03-10
相关资源
最近更新 更多