def costFunction(theta, X, y):
J = (-1/m) * np.sum(np.multiply(y, np.log(sigmoid(X @ theta)))
+ np.multiply((1-y), np.log(1 — сигмоид(X @ theta))))
вернуть J

в приведенном выше коде я не понял эту строку: «sigmoid(X @ theta)». Больше всего меня смутило то, что сигмовидная функция принимает только один аргумент, а здесь их два вместе с символом @. что происходит на самом деле?