【问题标题】:"'int' object is not callable" Error When Trying To Plot尝试绘图时出现“'int'对象不可调用”错误
【发布时间】:2013-12-13 08:27:06
【问题描述】:

这是我的代码,

import numpy as np
import math
import matplotlib.pyplot as plt

#Voltages 
V,I = np.genfromtxt('Photocurrent_graph_2.csv', dtype=float, delimiter=',', 
                    usecols=(0,2), skiprows=1, unpack=True)

z = np.polyfit(V,I,6)


def function(x):
    return (z[0])*x**6 (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]

plt.plot(V, function(V))    
plt.plot(V,I,'ro')

如果我注释掉 plt.plot(V, function(V)) 行,python 不会给我任何错误。我做错了什么?

编辑:

我遵循了 iCodez 的建议,但没有收到新的错误消息,

return (z[0])*x**6 + (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
IndexError: index 7 is out of bounds for axis 0 with size 7

【问题讨论】:

    标签: python python-2.7 matplotlib callable


    【解决方案1】:

    问题出在这一行:

    return (z[0])*x**6 (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
    

    您忘记了(z[0])*x**6(z[1])*x**5 之间的+

    这里是固定版本:

    return (z[0])*x**6 + (z[1])*x**5 + (z[2])*x**4 + (z[3])*x**3 + (z[4])*x**2 + (z[6])*x + z[7]
    

    如果没有+,您尝试调用(z[0])*x**6,它是一个整数,直接在它后面放置(z[1])

    【讨论】:

    • 哦,是的。看,我想看看我是否错过了一个*,而忽略了我是否错过了一个+。我解决了这个问题,但现在我收到了这条消息:IndexError: index 7 is out of bounds for axis 0 with size 7
    • 错误是z[7]造成的吗?我认为那将是 y 截距。
    • 是的,你是对的。我实际上做了这件事。感谢您的帮助。
    【解决方案2】:

    您在第一个表达式之后错过了 + 符号。 您使用了太多括号 - 它们不会增加代码的清晰度,只会使其不可读 还有一种更好的方法来编写多项式计算:

    sum(c*x**pos for pos, c in enumerate(reversed(z)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2012-11-22
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多