如何在matplotlib上绘制以下函数:
对于[n,n+1]
中的所有时间间隔t,n {偶数为f(t)=1
,n n为f(t)=-1
。所以这基本上是一个步长函数,f(t)=1
从0到1,f(t)=-1
从1到2,f(t)=1
从2到3,f(t)=-1
从3到4,所以上。
到目前为止,这是我的代码:
t = arange(0,12)
def f(t):
if t%2 == 0:
for t in range(t,t+1):
f = 1
if t%2 != 0:
for t in range(t,t+1):
f = -1
这是此代码的过程:
f(t)
。t=0,2,4,6,8,10,12
。f=1
。你能看到这个代码的根本错误吗?我让事情变得复杂吗?
当我尝试使用
进行绘图时matplotlib.pyplot.plot(t,f,'b-')
matplotlib.pyplot.show()
我得到ValueError
说“x和y必须具有相同的第一维”。
这里出了什么问题?
答案 0 :(得分:1)
您可以使用numpy.repeat
来加倍数组t
中的元素,并使用1 - 2 * (t%2)
构建(-1,1)模式:
t = np.arange(13)
f = np.repeat(1 - 2 * (t%2), 2)[:-1]
t = np.repeat(t, 2)[1:]
In [6]: t
Out[6]:
array([ 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
9, 9, 10, 10, 11, 11, 12, 12])
In [7]: f
Out[7]:
array([ 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1, 1,
1, -1, -1, 1, 1, -1, -1, 1])
或许更容易:
In [8]: n = 12
In [9]: t = np.repeat(np.arange(n+1), 2)[1:-1]
In [10]: f = np.array([1,1,-1,-1]*(n//2))