每个元素与数组中每个其他元素的点积

时间:2011-01-17 20:03:55

标签: python numpy dot-product

是否有一种简单的方法可以将数组中一个元素的点积与其他元素相加? 所以给出:

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

我想得到结果:

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

即。 a [0] dot a [1],a [0] dot a [2],a [1] dot a [2]。

我正在使用的数组不是正方形;这只是一个例子。

谢谢!

3 个答案:

答案 0 :(得分:4)

>>> 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]])

答案 1 :(得分:1)

因为看起来你正在使用numpy:

from itertools import combinations
import numpy as np

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

我检查了它,它似乎适用于我的python安装。

答案 2 :(得分:0)

这是另一个:

>>> 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])