尝试在matplotlib中使用sum运算符会出现错误

时间:2019-10-30 10:20:58

标签: numpy matplotlib sum jupyter-notebook interactive

因此,我首先要提到的是,我基本上对与Jupyter Notebook,matplotlib和numpy之类的东西相关的一切都是全新的。因此,这就是为什么我很可能无法明确表达我的问题。因此,我恳求您的耐心:)(是的,我的英语太烂了...)

无论如何,我正在尝试创建一个互动情节。因此,我想显示方波的第一个 n 个多项式的函数,其中可以使用滑块选择 n 的值。这是我到目前为止所得到的:

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

%matplotlib inline

plt.rcParams['figure.figsize'] = (11,4)
plt.rcParams['figure.dpi'] = 150

from ipywidgets import interact,interactive, fixed, interact_manual
import ipywidgets as Widgets


def f(n):

    plt.plot(      np.arange(0,10), 1/pi * sum(  2/(i* pi) * (1- cos(i*pi) ) * sin(i*np.arange(0,10)) for i in range(1,n)   )       ) 
    plt.ylim(-2,2)
interact(f, n= 1)

现在,一切正常,直到我设置函数的那一行为止,所以有了这一行

plt.plot(np.arange ...)

它给我以下错误:

ValueError:x和y必须具有相同的第一尺寸,但形状为(10,)和(1,)

我已经弄清楚这与使用 sum()运算符并在其中使用变量 n 有关。如果我不将 n 放在 sum 中,则说明一切正常,并且我得到了图形。

因此,基本上的问题是,要实现我的想法,我将要做些什么。

谢谢您的回复,我知道我的帖子可能因为其样式或其他内容而对某些人感到非常讨厌,对此深感抱歉。

2 个答案:

答案 0 :(得分:0)

使用sum意味着您将值列表折叠为一个值,这就是numpy告诉您的-您有10个x值和1个y值(因为您刚刚将它们全部添加了)。我认为您的意思是创建一个总和列表,因此只需将一个)之后的右括号(for i in range(n))移到它之前:

plt.plot(np.arange(0,10), 1/pi * sum(2/(i* pi) * (1- cos(i*pi)) * sin(i*np.arange(0,10))) for i in range(1,n))

答案 1 :(得分:0)

因此,对于那些对答案感兴趣的人(可能有一些):我找到了一个不错的简单解决方案。

问题是事实,那就是线

interact(f, n= 1)

不能单独工作。现在我这样说了,

interact(f, n =widgets.IntSlider(min=2, max=100, step=1, value=2))

所以-最重要的是-说滑块应该是IntSlider,一切正常!

无论如何,谢谢您的帮助!由于我是该平台的新手,所以我不知道如何解决已解决的问题,但可以肯定地关闭这里的问题。