Умножьте каждый элемент из 2 массивов numpy и затем суммируйте

#arrays #numpy #numpy-ndarray

#массивы #тупой #numpy-ndarray

Вопрос:

В принципе, у меня есть два 1d numpy-массива, назовем их x и y, оба одинаковой длины. Я хочу, по сути, получить результат x1 y1 x2 y2 … xn *yn. Очевидно, что я мог бы сделать это с помощью цикла for, но есть ли встроенный метод или что-то, где я могу сделать это в одной строке?

Комментарии:

1. Какой код вы пробовали, возможно, включая любой код, который может содержать for циклы?

2. Я специально пытаюсь сделать это в одной строке

3. (x * y).sum() ?

4. @user3483203 Это работает!! Если вы опубликуете это в качестве ответа, я отмечу его как правильный. Спасибо!

Ответ №1:

То, что вы пытаетесь вычислить, известно как «внутреннее произведение» и, в случае двух векторов, называется «точечным произведением». Numpy имеет встроенные функции для вычисления обоих, которые оптимизированы для скорости по сравнению с простым (x*y).sum() решением.

 import numpy as np

a = np.array([1, 2, 3])
b = np.array([3, 2, 1])

print(np.inner(a, b))
# 10

print(np.dot(a, b))
# 10
 

Некоторые результаты синхронизации в таблице ниже с векторами a и b 1000 случайно выбранных элементов с использованием np.random.randn :

 np.dot(a, b)   # 920 ns ±  9.9 ns
np.inner(a, b) # 1.1 µs ± 83.5 ns
(a*b).sum()    # 4.2 µs ± 62.9 ns
np.sum(a*b)    # 5.7 µs ± 170  ns
 

Ответ №2:

Вы можете использовать sum(x*y) или (x*y).sum() , они эквивалентны.