Построить Кусочную функцию в 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


Но я не использую эти функции правильно, и теперь просто случайно угадываю, как это сделать.

Некоторые ответы начинают доходить до нас... Но точки соединяются в единое целое. линия на участке. Как мы можем просто построить точки?



Введите описание изображения здесь

2077   4  

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

    Ничего не найдено.