#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()
, они эквивалентны.