Построить Кусочную функцию в Python
Я хотел бы построить следующую кусочную функцию в Python, используя Matplotlib, от 0 до 5.
f(x) = 1, x != 2; f(x) = 0, x = 2
На Языке Python...
def f(x):
if(x == 2): return 0
else: return 1
Используя NumPy я создаю массив
x = np.arange(0., 5., 0.2)
array([ 0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. ,
2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2,
4.4, 4.6, 4.8])
Я пробовал такие вещи, как...
import matplotlib.pyplot as plt
plt.plot(x,f(x))
Или...
vecfunc = np.vectorize(f)
result = vecfunc(t)
Или...
def piecewise(x):
if x == 2: return 0
else: return 1
import matplotlib.pyplot as plt
x = np.arange(0., 5., 0.2)
plt.plot(x, map(piecewise, x))
ValueError: x and y must have same first dimension
Но я не использую эти функции правильно, и теперь просто случайно угадываю, как это сделать.
Некоторые ответы начинают доходить до нас... Но точки соединяются в единое целое. линия на участке. Как мы можем просто построить точки?
4 ответов:
Некоторые ответы начинают доходить до нас... Но суть в том, что соединены в линию на участке. Как мы можем просто построить точки?
import matplotlib.pyplot as plt import numpy as np def f(x): if(x == 2): return 0 else: return 1 x = np.arange(0., 5., 0.2) y = [] for i in range(len(x)): y.append(f(x[i])) print x print y plt.plot(x,y,c='red', ls='', ms=5, marker='.') ax = plt.gca() ax.set_ylim([-1, 2]) plt.show()
Проблема заключается в том, что функция
fпринимает в качестве входных данных не массив, а одно число. Вы можете:plt.plot(x, map(f, x))Функция
mapберет функциюf, массивxи возвращает другой массив, где функцияfприменяется к каждому элементу массива.
Вы можете использовать np.кусочно на массиве:
x = np.arange(0., 5., 0.2) import matplotlib.pyplot as plt plt.plot(x, np.piecewise(x, [x == 2, x != 2], [0, 1]))
Приложение работает, но требует небольшой дополнительной обработки. NP кусочно работает нормально. можно просто сделать это для любой функции:
`
import math import matplotlib as plt xs=[] xs=[x/10 for x in range(-50,50)] #counts in tenths from -5 to 5 plt.plot(xs,[f(x) for x in xs])`


Comments