绘制指定x范围的函数时触发TypeError错误的解决方案求助
解决TypeError: unsupported operand type(s) for *: 'float' and 'range'错误
这个错误的核心原因很直白:你用Python内置的range()生成的是一个range迭代器对象,它不是数值数组,没办法直接和浮点数做逐元素的算术运算(比如乘法、平方、立方这些操作)。numpy的算术运算需要作用在数组类型上,而非range对象。
修正方案
把x从range对象换成numpy的数值数组即可,这里有两种常用的实现方式:
方式1:用np.arange()生成和原range一致的整数数组
np.arange()会返回一个numpy数组,完美适配后续的算术运算:
import numpy as np import matplotlib.pyplot as plt # 将range替换为np.arange,生成numpy数组 x = np.arange(273, 1273) # 现在可以正常计算y值 y = -0.7765 + (0.014350 * x) - (0.000012209 * (x ** 2)) + (3.8289e-09 * (x ** 3)) plt.plot(x, y, 'r') plt.show()
方式2:用np.linspace()生成更平滑的浮点数数组(适合追求细腻曲线的场景)
如果希望绘制的曲线更平滑,可以用np.linspace()生成指定数量的均匀分布数值,比如生成1000个覆盖273到1272的数值(和原range的范围保持一致):
import numpy as np import matplotlib.pyplot as plt # 生成1000个均匀分布的数值,覆盖273到1272的区间 x = np.linspace(273, 1272, num=1000) y = -0.7765 + (0.014350 * x) - (0.000012209 * (x ** 2)) + (3.8289e-09 * (x ** 3)) plt.plot(x, y, 'r') plt.show()
错误原因详解
当你尝试执行0.014350 * x时,x是range对象,Python无法识别如何将浮点数与range对象进行乘法运算——range对象本身不支持这种逐元素的向量运算,而numpy数组正是为这类运算设计的,所以替换成numpy数组就能彻底解决问题。
内容的提问来源于stack exchange,提问作者Sam Capp
相关产品推荐
相关产品推荐

