Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,创建三维点积的大维矩阵_Python_Arrays_Numpy_Matrix_Dot Product - Fatal编程技术网

Python,创建三维点积的大维矩阵

Python,创建三维点积的大维矩阵,python,arrays,numpy,matrix,dot-product,Python,Arrays,Numpy,Matrix,Dot Product,这是我的目标,使用Python Numpy: 我想创建一个1000维数组/点乘值矩阵。这意味着每个数组/矩阵项都是向量1到1000的点积。构造这一点在理论上很简单:定义向量v1,v2,…,v1000的11000维矩阵 并取带转置的点积,即 matrix_of_dotproducts = np.tensordot(vectorvalue.T, vectorvalue) 阵列/矩阵的形状将是10001000。1,1条目将是向量v1、v1的点积,1,2条目将是向量v1、v2等的点积。为了使用num

这是我的目标,使用Python Numpy:

我想创建一个1000维数组/点乘值矩阵。这意味着每个数组/矩阵项都是向量1到1000的点积。构造这一点在理论上很简单:定义向量v1,v2,…,v1000的11000维矩阵

并取带转置的点积,即

matrix_of_dotproducts = np.tensordot(vectorvalue.T, vectorvalue)
阵列/矩阵的形状将是10001000。1,1条目将是向量v1、v1的点积,1,2条目将是向量v1、v2等的点积。为了使用numpy计算三维向量的点积,明智的做法是使用numpy.tensordot而不是numpy.dot

我的问题是:我不是从向量值数组开始的。我从每个坐标值的三个1000元素数组开始,即x坐标、y坐标和z坐标的数组

xvalues = np.array([x1, x2, x3, ..., x1000])
yvalues = np.array([y1, y2, y3, ..., y1000])
zvalues = np.array([z1, z2, z3, ..., z1000])
最简单的方法是构造一个31000 numpy的数组/矩阵,然后为每一对取张量点积吗

v1  = np.array([x1,y1,z1])
v2 = np.array([x2,y2,z2]) 
...
我相信有一个更容易处理和更有效的方法来做到这一点

PS:为了清楚起见,我想买一个3D点产品。也就是说,对于向量

A=a1、a2、a3 B=b1,b2,b3

点积应该是


dotproductA,B=a1b1+a2b2+a3b3

IIUC,您可以按照建议构建中间阵列:

>>> arr = np.vstack([xvalues, yvalues, zvalues]).T
>>> out = arr.dot(arr.T)
这似乎就是你想要的:

>>> out.shape
(1000, 1000)
>>> out[3,4]
1.193097281209083
>>> arr[3].dot(arr[4])
1.193097281209083

所以,你的最初想法并不遥远。连接阵列所涉及的开销非常小,但是如果您有兴趣在numpy中进行连接,则有一组内置函数vstack、hstack和dstack,它们应该完全按照您的意愿执行。分别为垂直、水平和深度

我会让你自己决定在哪里给你,但这里有一个不知羞耻地从文档中偷来的例子来帮助你开始:

>>> a = np.array([1, 2, 3])
>>> b = np.array([2, 3, 4])
>>> np.vstack((a,b))
array([[1, 2, 3],
       [2, 3, 4]])
供参考:,及

如果在这里有三个单独的功能感觉有点过分,那么你是对的!这就是为什么numpy也有连接函数。它只是vstack、hstack和dstack的一个推广,它接受一个轴参数

>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])

或者更简洁一点:arr=np.array[xvalues,yvalues,zvalues];我不知道该如何回答这个问题。你们两个同时回应。我讨厌StackOverflow的这个特性……应该有一种方法可以让两个评论者都知道。谢谢你!伟大而翔实的答案!
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
       [3, 4],
       [5, 6]])