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

Python 数组中每个元素与其他元素的点积,python,numpy,dot-product,Python,Numpy,Dot Product,有没有一种简单的方法可以将数组中一个元素的点积与另一个元素的点积相加? 因此: 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] 我正在使用的阵列将不是方形的;这只是一个例子 谢谢 因为看起来您正在使用numpy: from itertools import combinations import

有没有一种简单的方法可以将数组中一个元素的点积与另一个元素的点积相加? 因此:

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]

我正在使用的阵列将不是方形的;这只是一个例子


谢谢

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

from itertools import combinations
import numpy as np

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

我检查了这个,它似乎可以在我的python安装中使用。

因为它看起来像是在使用numpy:

from itertools import combinations
import numpy as np

dot_products = [np.dot(*v) for v in combinations(vectors, 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]])
我检查了这个,它似乎在我的python安装中起作用

>>> 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]])
它给你的比你想要的更多,但不可否认它很容易

它给你的比你想要的更多,但不可否认它很容易

这里还有一个:

>>> 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])
这里还有一个:

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

如果您只想提取感兴趣的元素:np.dotX,X.T[np.triu_index_fromX,k=1]。谢谢Joe,尽管我正在使用的数组不是方形的。注意:triu_index_from在Numpy v.1.4.0中是新的。克里斯托夫:你可以改为使用triu_索引lenx,k=1,因为X*X.T总是正方形。如果你想只提取感兴趣的元素:np.dotX,X.T[np.triu_index_fromX,k=1]。谢谢乔,尽管我使用的数组不是正方形的。注意:triu_index_from在Numpy v.1.4.0中是新的。克里斯托夫:你可以改为使用triu_indicateslenx,k=1,因为X*X.T总是正方形。你知道这与纯Numpy实现相比有多快吗?我将要使用的数组中大约有5000-10000个元素,所以我需要它变得快速。对于现代计算机来说,5k-10k元素实际上什么都不是。@Seth Johnson:在这种情况下,甚至5k-10k元素也算数。对于所有组合,单独调用np.dot的开销太大。np.dot可以更有效地计算所有向量组合之间的内积。谢谢你知道这和纯Numpy实现相比有多快吗?我将要使用的数组中大约有5000-10000个元素,所以我需要它变得快速。对于现代计算机来说,5k-10k元素实际上什么都不是。@Seth Johnson:在这种情况下,甚至5k-10k元素也算数。对于所有组合,单独调用np.dot的开销太大。np.dot可以更有效地计算所有向量组合之间的内积。谢谢