“'int'对象不可调用”尝试绘图时出错

时间:2013-11-27 15:44:38

标签: python python-2.7 matplotlib callable

这是我的代码,

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,函数(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

2 个答案:

答案 0 :(得分:2)

问题在于这一行:

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])这是一个整数。

答案 1 :(得分:0)

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

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