数组中每个元素与其他元素的点积
有没有简单的方法可以把数组中的一个元素和其他所有元素做点积?
比如说,给定这个数组:
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] 的点积。
我正在处理的数组不会是方形的;这只是一个例子。
谢谢!
3 个回答
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])
1
看起来你在使用numpy这个库:
from itertools import combinations
import numpy as np
dot_products = [np.dot(*v) for v in combinations(vectors, 2)]
我检查了一下,发现它在我的Python环境中可以正常工作。
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]])
它给你的东西比你想要的还要多,但这毫无疑问是很简单的。
或者