我是ipython的新手。我在ipython中有这段代码
def derivative(x):
return 3*(x^2)
derivative_estimate = lambda x: difference_quotient(cube, x, h=0.00001)
x = range(-10, 10)
import matplotlib.pyplot as plt
plt.title("Actual Derivatives vs Estimates")
x = range(-10,10)
plt.plot(x, map(derivative, x), 'rx', label = 'Actual') # red x
plt.plot(x, map(derivative_estimate, x), 'b+', label = 'Estimate') # blue +
plt.show()
当我尝试运行时,它会向我显示这些错误
ValueError Traceback (most recent call last)
<ipython-input-12-211954bb4dc5> in <module>()
6 plt.title("Actual Derivatives vs Estimates")
7 x = range(-10,10)
----> 8 plt.plot(x, map(derivative, x), 'rx') # red x
9 plt.plot(x, map(derivative_estimate, x), 'b+') # blue +
10 plt.show()
C:\Users\User\Anaconda3\lib\site-packages\matplotlib\pyplot.py in plot(*args, **kwargs)
3152 ax.hold(hold)
3153 try:
-> 3154 ret = ax.plot(*args, **kwargs)
3155 finally:
3156 ax.hold(washold)
C:\Users\User\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
1809 warnings.warn(msg % (label_namer, func.__name__),
1810 RuntimeWarning, stacklevel=2)
-> 1811 return func(ax, *args, **kwargs)
1812 pre_doc = inner.__doc__
1813 if pre_doc is None:
C:\Users\User\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in plot(self, *args, **kwargs)
1422 kwargs['color'] = c
1423
-> 1424 for line in self._get_lines(*args, **kwargs):
1425 self.add_line(line)
1426 lines.append(line)
C:\Users\User\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _grab_next_args(self, *args, **kwargs)
384 return
385 if len(remaining) <= 3:
--> 386 for seg in self._plot_args(remaining, kwargs):
387 yield seg
388 return
C:\Users\User\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs)
362 x, y = index_of(tup[-1])
363
--> 364 x, y = self._xy_from_xy(x, y)
365
366 if self.command == 'plot':
C:\Users\User\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _xy_from_xy(self, x, y)
221 y = _check_1d(y)
222 if x.shape[0] != y.shape[0]:
--> 223 raise ValueError("x and y must have same first dimension")
224 if x.ndim > 2 or y.ndim > 2:
225 raise ValueError("x and y can be no greater than 2-D")
ValueError: x and y must have same first dimension,
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
Matplotlib的plot
函数无法处理map
返回的迭代器。在调用plot
之前将迭代器扩展为列表:
plt.plot(x, list(map(derivative, x)), 'rx', label = 'Actual')
答案 1 :(得分:0)
尝试导入numpy
,然后使用numpy.linspace
或numpy.arange
代替range
。我相信您的问题是在您的derivative
函数中创建的,您可以在其中3*x
。如果x
是一个列表(从标准range
返回,3*x
将返回[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
x=[1, 2, 3, 4]
。您想要得到的是{{1}如果你改用3*x = [3, 6, 9, 12]
或numpy.linspace
,就会出现这种情况。