weights
— это массив из определенного количества значений, которые умножаются на x^i. Без суммирования элементов weights
, как мне переписать эту функцию в одну строку для цикла?
x = np.array([0,1,2,3])
weights = np.zeros(order + 1)
def estimate(weights, x):
est = 0
for i in range(len(weights)):
est += weights[i] * x ** i
return est
estimate(weights, x)
Я хотел бы переписать эту функцию в одну строку, чтобы:
est = [(est + (weights[i] * x ** i)) for i in range(len(weights))]
Но это не дает мне правильного результата. Чего я не понимаю, так это почему эти два не эквивалентны. Как вы справляетесь с +=
в цикле for из одной строки? Может быть, есть другое ключевое слово, которое я мог бы использовать, которое ускользает от меня прямо сейчас?
Обновлено:
На самом деле это правильный ответ:
est = sum([(weights[i] * (x ** i)) for i in range(order + 1)])
У меня была еще одна ошибка в моем коде, из-за которой я не мог получить правильный результат, не связанный с этим утверждением.
Я извиняюсь за все проблемы.
Это не совсем то, что я хочу, я не хочу суммировать весь список. Веса - это массив.
Однострочник @AhmadMoussa alpert и ваша функция estimate
эквивалентны (ну... за исключением возврата), так как же это не делает то, что вы хотите?
sum() суммирует отдельные значения, которые находятся в весах массива, и возвращает единственное число. Я хотел бы, чтобы est возвращался в виде массива. И может ли кто-нибудь сказать мне причину всех отрицательных голосов? Так что я могу это исправить?
(Повторяя deceze немного раньше...) вы ищете = [ ... ]
вместо += [ ... ]
? Н.Б. это не похоже на то, что делает ваша функция.
Я отредактировал свой вопрос, может быть, теперь он немного понятнее. Извините за все неприятности...
Хорошо, я ценю дополнительный контекст, но Макви недостаточно. order
не определено, и даже если это так (я пробовал order = 2
вверху), то я получаю TypeError, поскольку [0, 1, 2, 3] ** 0
не является допустимым python. Пожалуйста, убедитесь, что опубликованный фрагмент воспроизводит вашу проблему. (Случайное предположение, возможно, вы имели в виду x = np.array([0, 1, 2, 3])
?)
Здравствуйте еще раз, извините за все неудобства. Предлагаемое утверждение действительно было правильным ответом на мою проблему. Но у меня была другая ошибка в коде, которая мешала этому, и я предположил, что проблема именно в этом. Еще раз приносим извинения за неудобства.
это просто сумма элементов этого списка понимания:
est = sum([(weight * x ** i) for i, weight in enumerate(weights)])
Следующий однострочный делает то, что вы хотите:
est = sum([(weight * x ** i) for i, weight in enumerate(weights)])
sum([(weight * x ** i) for i, weight in enumerate(weights)])
Разве ты не этого хочешь?