Почему криво строится график кусочной функции
Пытаюсь построить треугольную функцию принадлежности кусочной функцией, но почему-то выводит не корректно на plot (картинка во вложении)
import numpy as np
import matplotlib.pyplot as plt
def s_similar(x, a, b, c):
if x <= a:
return 0
elif x > a and x <= b:
return (x - a)/(b - a)
elif x > b and x <= c:
return -(x - b)/(c - b) + 1
else:
return 0
x = np.arange(0, 100, 1)
g = np.vectorize(s_similar)
y = g(x, 20, 50, 80)
plt.plot(x, y)
plt.show()
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
потому что у вас идет вычисление в целых числах и все эти деления дают результат < 1, т.е 0
используйте вот такой код:
g = np.vectorize(s_similar, otypes=[np.float])
и все будет в порядке
вылезает предупреждение на счет float (DeprecationWarning: 'np.float' is a deprecated alias for the builtin 'float'.), поэтому используйте лучше такой код:
g = np.vectorize(s_similar, otypes=[np.float64])
он не выдает никаких предупреждений

