Почему криво строится график кусочной функции

Пытаюсь построить треугольную функцию принадлежности кусочной функцией, но почему-то выводит не корректно на 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])

он не выдает никаких предупреждений

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

→ Ссылка