只使用 numpy,有没有办法创建方波?
Using only numpy, is there a way to create a square wave?
我尝试过使用掩码并制作像 x = [0,0.5,0.51,1,1.01], y = [1,1,-1,-1,1] 这样的列表当然可行,但非常乏味并没有我想制作一个从 x = 0 到 5 的方波那么好。
你可以写一个像这样的小函数来填充 x 和 y
import matplotlib.pyplot as plt
import math
def SquareWave(high, low, start, end, width):
print("Square Wave")
##Calculate how many cycles
ncycles = int(math.ceil((end - start)/width)) #Round up
print(ncycles)
x=[]
y=[]
x.append(start)
y.append(high)
xstep = width / 2
for n in range(ncycles):
start += xstep #Increment by the step width
x.append(start)
y.append(high)
x.append(start)
y.append(low)
start += xstep #Increment by the step width
x.append(start)
y.append(low)
x.append(start)
y.append(high)
return(x,y)
x,y = SquareWave(1,-1, 0, 5, 1)
plt.plot(x,y)
:一般解:
import matplotlib.pyplot as plot
import numpy as np
def sq(x, y):
mindiff = min([x[i+1]-x[i] for i in range(4)])
up_x = np.arange(x[0], x[-1], mindiff)
up_y = list(map(lambda i: y[sum(i > x)], up_x))
print(up_y)
plot.plot(up_x, up_y)
plot.show()
x = [0,0.5,0.51,1,1.01]
y = [1,1,-1,-1,1]
sq(x, y)
:具体给你代码:
import matplotlib.pyplot as plot
import numpy as np
up_t = list(np.linspace(x[0], x[1], 100)) + list([0.5])+list([0.51])+list(np.linspace(x[2], x[3], 100)) + list([1.01])
up_y = [1 for i in range(100)] + [1, -1]+ [-1 for i in range(100)] + [1]
t = np.array(up_t)
plot.plot(up_t, up_y)
plot.show()
我尝试过使用掩码并制作像 x = [0,0.5,0.51,1,1.01], y = [1,1,-1,-1,1] 这样的列表当然可行,但非常乏味并没有我想制作一个从 x = 0 到 5 的方波那么好。
你可以写一个像这样的小函数来填充 x 和 y
import matplotlib.pyplot as plt
import math
def SquareWave(high, low, start, end, width):
print("Square Wave")
##Calculate how many cycles
ncycles = int(math.ceil((end - start)/width)) #Round up
print(ncycles)
x=[]
y=[]
x.append(start)
y.append(high)
xstep = width / 2
for n in range(ncycles):
start += xstep #Increment by the step width
x.append(start)
y.append(high)
x.append(start)
y.append(low)
start += xstep #Increment by the step width
x.append(start)
y.append(low)
x.append(start)
y.append(high)
return(x,y)
x,y = SquareWave(1,-1, 0, 5, 1)
plt.plot(x,y)
:一般解:
import matplotlib.pyplot as plot
import numpy as np
def sq(x, y):
mindiff = min([x[i+1]-x[i] for i in range(4)])
up_x = np.arange(x[0], x[-1], mindiff)
up_y = list(map(lambda i: y[sum(i > x)], up_x))
print(up_y)
plot.plot(up_x, up_y)
plot.show()
x = [0,0.5,0.51,1,1.01]
y = [1,1,-1,-1,1]
sq(x, y)
:具体给你代码:
import matplotlib.pyplot as plot
import numpy as np
up_t = list(np.linspace(x[0], x[1], 100)) + list([0.5])+list([0.51])+list(np.linspace(x[2], x[3], 100)) + list([1.01])
up_y = [1 for i in range(100)] + [1, -1]+ [-1 for i in range(100)] + [1]
t = np.array(up_t)
plot.plot(up_t, up_y)
plot.show()