numpy.vdot
numpy.vdot(a, b)
Функция vdot() вычисляет cкалярное произведение двух векторов в том числе и комплексных.
Если a состоит из комплексных чисел, а b из вещественных, то вычисляется обычное скалярное произведение np.dot()
, но в качестве первого аргумента берется вектор комплексно сопряженный первому a = np.conj(a)
.
Важно помнить, что vdot() может обрабатывать многомерные массивы, но всегда выполняет их предварительное сжатие до одной оси.
-
- a, b - числа, массивы NumPy или подобные массивам объекты.
- Одномерные массивы. Если это многомерные массивы, то они будут сжаты до одной оси.
-
- результат - массив NumPy или число
- Скалярное произведение двух векторов. Тип данных результата зависит от типа данных входных массивов и всегда приводится к более общему.
Примеры
Если первый аргумент состоит из комплексных чисел, а второй нет, то первый аргумент заменяется на на вектор комплексно ему сопряженный:
>>>> 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]])