numpy.vdot

numpy.vdot(a, b)

Функция vdot() вычисляет cкалярное произведение двух векторов в том числе и комплексных.

Если a состоит из комплексных чисел, а b из вещественных, то вычисляется обычное скалярное произведение np.dot(), но в качестве первого аргумента берется вектор комплексно сопряженный первому a = np.conj(a).

Важно помнить, что vdot() может обрабатывать многомерные массивы, но всегда выполняет их предварительное сжатие до одной оси.

Параметры:
a, b - числа, массивы NumPy или подобные массивам объекты.
Одномерные массивы. Если это многомерные массивы, то они будут сжаты до одной оси.
Возвращает:
результат - массив NumPy или число
Скалярное произведение двух векторов. Тип данных результата зависит от типа данных входных массивов и всегда приводится к более общему.
Смотрите так же:
dot, linalg.multi_dot


Примеры

Если первый аргумент состоит из комплексных чисел, а второй нет, то первый аргумент заменяется на на вектор комплексно ему сопряженный:

>>>> A = np.array([1 + 2j, 3 + 4j])
>>> B = np.array([7, 7])
>>> 
>>> np.vdot(A, B)
(28-42j)
>>> 
>>> np.dot(np.conj(A), B)
(28-42j)
>>> 
>>> np.dot(A, B)
(28+42j)

Однако, поведение функций np.dot() и np.vdot() отличается если оба вектора являются комплексными:

>>> np.vdot(A, C)    #  правильно
(20-10j)
>>> 
>>> np.dot(A, C)    #  неправильно
22j

Многомерные векторы сжимаются до одной оси:

>>> A = [[1, 2], [3, 4]]
>>> B = [[4, 3], [2, 1]]
>>> 
>>> np.vdot(A, B)
20
>>> 1*4 + 2*3 + 3*2 + 4*1
20
>>> 
>>> np.dot(A, B)
array([[ 8,  5],
       [20, 13]])