У меня была синтаксическая ошибка с циклом for

-6

Поэтому, в первую очередь, в моих исследованиях я столкнулся с этим сообщением. Это звучало как точная проблема, с которой я столкнулся, поэтому я опробовал метод, предложенный в ответах. Я пытаюсь использовать алгоритм k-Nearest-Neighbor со следующим кодом:

train_data_copy['distance_to_new'] = numpy.sqrt(
0
for k in predictors:
+(new_example[k]-train_data_copy[k])**2

где predors - массив переменных в моем наборе данных.

Это были две последние строки после того, как я изменил интервал:

for k in predictors:
+(new_example[k]-train_data_copy[k])**2

Я также пробовал:

for k in predictors[]:
+(new_example[k]-train_data_copy[k])**2

Сообщение об ошибке:

File "<ipython-input-27-a08c65d44488>", line 7
for k in predictors:
^
SyntaxError: invalid syntax

Пожалуйста помоги. Я должен закончить этот проект в ближайшее время.

EDIT: Я уже вычислил среднее значение. Я пытаюсь выяснить расстояние от среднего значения каждой конкретной переменной, так что я могу выяснить, насколько далеко от общего среднего есть конкретная точка данных.

EDIT 2: мне удалось решить эту проблему самостоятельно, просто выписав все переменные вручную. Я просто надеялся, что будет более быстрый способ сделать это.

спросил(а) 2021-01-19T14:32:54+03:00 2 месяца, 3 недели назад
1
Решение
63

Вы не можете использовать блок в вызове функции. Вместо этого используйте понимание списка.

train_data_copy['distance_to_new'] = numpy.sqrt(
[(new_example[k] - train_data_copy[k])**2 for k in predictors]
)

Это оказывается существенно


train_data_copy['distance_to_new'] = [(new_example[k] - train_data_copy[k]) for k in predictors]

так как **2 нейтрализуется numpy.sqrt(). Однако ваш код в первом фрагменте подсказывает, что вы хотите сначала суммировать все числа. Вы можете сделать это, используя функцию sum.

train_data_copy['distance_to_new'] = sum((new_example[k]-train_data_copy[k])**2 for k in predictors)

ответил(а) 2021-01-19T14:32:54+03:00 2 месяца, 3 недели назад
62

Python отличает утверждения (инструкции) от выражений (вещи, которые оценивают значение). Вы не можете использовать оператор for в контексте выражения (например, аргумент функции sqrt), потому что он ничего не оценивает, даже не None. Это является причиной ошибки синтаксиса.

Вы также не сбалансировали свои круглые скобки.

Неясно, из вашего кода, что вы даже хотите сделать. Возможно, вы хотели использовать понимание?

ответил(а) 2021-01-19T14:32:54+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема