matplotlib在python3中失败

时间:2017-02-25 18:55:36

标签: python matplotlib

我想用matplotlib渲染一个6度函数,它适用于我找到的代码,但不适用于python3。

import numpy as np
from matplotlib import pyplot as plt

def langrange_polynomial(X, Y):
    def L(i):
        return lambda x: np.prod([(x-X[j])/(X[i]-X[j]) for j in range(len(X)) if i != j]) * Y[i]
    Sx = [L(i) for i in range(len(X))]  # summands
    return lambda x: np.sum([s(x) for s in Sx])

# cut something

# Here i get the points with a function
(X, Y) = [1,2,3,4,5,6,7],[0,20,10,4,3,40,4]
F = langrange_polynomial(X, Y)

x_range = np.linspace(X[0], X[-1], 100)
plt.plot(X, Y, 'ro')
plt.plot(x_range, map(F, x_range))
plt.xlabel(r'$x$')
plt.ylabel(r'$F(x)$')
plt.title('Lagrange polynomial interpolation')
plt.grid(True)
plt.show()

获取此错误:

raise ValueError("x and y must have same first dimension")
ValueError: x and y must have same first dimension

在那条线上:

plt.plot(x_range, map(F, x_range))

我读到了关于将X,Y坐标声明为np.array的内容,但这无论如何都没有用。我在Python3.5中需要做什么?

1 个答案:

答案 0 :(得分:1)

在python 3中,map(function, iterable)返回迭代器而不是列表 您需要通过

获取列表
list(map(function, iterable))

或者,更具体地说,在这种情况下

plt.plot(x_range, list(map(F, x_range)))