Есть два способа сделать это: длинный путь с использованием вашего функционального подхода и короткий векторный путь.Я представляю оба:
Longway : вызов функции внутри цикла for и добавление значений y в список.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
def rect(i):
if 1<=i<=4:
y=1
else:
y=0
return y
f1 = []
for i in x:
f1.append(rect(i))
plt.plot(x,f1)
plt.show()
Short way : создайте условную маску и примените ее к вашему массиву y, чтобы заполнить ее 0 и 1 в зависимости от условия.
x = np.linspace(0, 10, 100)
mask = (x>=1) & (x <=4)
y = np.where(mask, 1, 0)
plt.plot(x,y)
plt.show()