Точечный продукт каждого элемента с любым другим элементом массива

StackOverflow https://stackoverflow.com/questions/4717311

  •  12-10-2019
  •  | 
  •  

Вопрос

Есть ли простой способ взять точечный продукт одного элемента массива с любым другим? Так дано:

array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

Я хотел бы получить результат:

array([  32.,   50.,  122.])

То есть a [0] точка a [1], a [0] точка a [2], a [1] точка a [2].

Массив, с которым я работаю, не будет квадратным; Это просто пример.

Спасибо!

Это было полезно?

Решение

>>> X = scipy.matrix('1 2 3; 4 5 6; 7 8 9')
>>> X*X.T
matrix([[ 14,  32,  50],
        [ 32,  77, 122],
        [ 50, 122, 194]])

Это дает вам больше, чем вы хотели, но это, несомненно, легко.

Или же

>>> X = scipy.array([[1,2,3], [4,5,6], [7,8,9]])
>>> scipy.dot(X, X.T)
array([[ 14,  32,  50],
       [ 32,  77, 122],
       [ 50, 122, 194]])

Другие советы

Так как похоже, что вы используете Numpy:

from itertools import combinations
import numpy as np

dot_products = [np.dot(*v) for v in combinations(vectors, 2)]

Я проверил это, и, похоже, он работает на моей установке Python.

Вот еще один:

>>> a = numpy.array([[1, 2, 3],
...        [4, 5, 6],
...        [7, 8, 9]])
>>> numpy.array([numpy.dot(a[i], a[j]) for i in range(len(a)) for j in range(i + 1, len(a))])
array([ 32,  50, 122])
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top