TypeError: объект «генератор» не вызывается при вычислении скалярного произведения векторов

Я новичок в Python и пытаюсь выполнить скалярное произведение двух векторов с помощью zip.

from typing import List    
vector = List[float]    
def dot_prod(v:vector,w:vector) -> float:    
    return sum(v_i*w_i for v_i,w_i in zip(v,w))

dot_prod([1,2,3],[4,5,6])

Я получаю следующую ошибку: TypeError: 'generator' object is not callable

Любая помощь в решении этой проблемы приветствуется... Спасибо!


person always_learning    schedule 22.06.2020    source источник
comment
На первый взгляд мне кажется нормально.   -  person Mateen Ulhaq    schedule 22.06.2020
comment
Поддерживая @MateenUlhaq, это работает, как и ожидалось, на моей машине (python 3.8)   -  person Jan    schedule 22.06.2020
comment
Код, кажется, в порядке и работает с Python 3.7.5. Какую версию Python вы используете?   -  person Roy2012    schedule 22.06.2020
comment
Вы переопределили sum или zip? Опубликованный код работает при чистом вызове Python 3.   -  person Tom Karzes    schedule 22.06.2020
comment
Спасибо всем. Это было связано с вопросом @TomKarzes. Я начал новый сеанс и смог выполнить его без каких-либо проблем.   -  person always_learning    schedule 23.06.2020


Ответы (1)


Вам не нужно делать это вручную, вы можете просто сделать это

Во-первых, вам нужно установить numpy

pip3 install numpy # If you use python3
pip install numpy # If you use python2
conda install numpy # If you use anaconda

Затем используйте этот код

import numpy as np

def dot_prod(x, y):  # X,Y are the vectors
    return np.dot(x, y)

Чтобы избежать ValueError:

def dot_prod(x, y):
    try:
       return np.dot(x, y)
    except ValueError:
       return np.dot(x, np.array(y).T)
person AbdullahTh    schedule 22.06.2020