Python获取数组长列表的点积

2024-05-14 15:03:53 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试着用numpy的点积函数得到两个数组的点积。你知道吗

import numpy as np

MWFrPos_Hydro1 = subPos1[submaskFirst1]
x = MWFrPos_Hydro1
MWFrVel_Hydro1 = subVel1[submaskFirst1]
y = MWFrVel_Hydro1
MWFrPosMag_Hydro1 = [np.linalg.norm(i) for i in MWFrPos_Hydro1]

np.dot(x, y)

退货

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-135-9ef41eb4235d> in <module>()
      6 
      7 
----> 8 np.dot(x, y)

ValueError: shapes (1220,3) and (1220,3) not aligned: 3 (dim 1) != 1220 (dim 0)

我不正确地使用这个函数?你知道吗

数组看起来像这样

print x

[[  51.61872482  106.19775391   69.64765167]
 [  33.86419296   11.75729942   11.84990311]
 [  12.75009823   58.95491028   38.06708527]
 ..., 
 [  99.00266266   96.0210495    18.79844856]
 [  27.18083954   74.35041809   78.07577515]
 [  19.29788399   82.16114044    1.20453501]]

print y

[[  40.0402298  -162.62153625 -163.00158691]
 [-359.41983032 -115.39328766   14.8419466 ]
 [  95.92044067 -359.26425171  234.57330322]
 ..., 
 [ 130.17840576   -7.00977898   42.09699249]
 [  37.37852478  -52.66002655 -318.15155029]
 [ 126.1726532   121.3104248  -416.20855713]]

在这种情况下,for循环np.vdot会更理想吗?你知道吗


Tags: 函数inimportnumpyfornp数组dot
2条回答

不能取两个n * m矩阵的点积,除非m == n将两个矩阵A和B相乘时,B需要有与A相同多的行。(所以你可以把n * m矩阵和m * n矩阵相乘。)

this article on multiplying matrices。你知道吗

一些可能的(n,3)数组产品(这里我只介绍一个)

In [434]: x=np.arange(12.).reshape(4,3)
In [435]: x
Out[435]: 
array([[  0.,   1.,   2.],
       [  3.,   4.,   5.],
       [  6.,   7.,   8.],
       [  9.,  10.,  11.]])

元素与元素的乘积,跨列求和;n值。这是一个类似数量级的数字。你知道吗

In [436]: (x*x).sum(axis=1)
Out[436]: array([   5.,   50.,  149.,  302.])

einsum相同,它提供了对哪些轴相乘,哪些轴求和的更多控制。你知道吗

In [437]: np.einsum('ij,ij->i',x,x)
Out[437]: array([   5.,   50.,  149.,  302.])

dot要求第1个的最后一个和第2个的最后一个大小相同,所以我必须使用x.T(转置)。对角线与上面的一致。你知道吗

在[438]中:np.dot公司(x,x.T) 出[438]: 数组([[5,14,23,32.], [ 14., 50., 86., 122.], [ 23., 86., 149., 212.], [32.,122.,212.,302.]])

np.einsum('ij,kj',x,x)做同样的事情。你知道吗

有一个新的matmul产品,但是像这样的2d数组就是dot。我必须将它们转换成3d数组来获得4个值;即使这样,我也必须挤出多余的尺寸:

In [450]: x[:,None,:]@x[:,:,None]
Out[450]: 
array([[[   5.]],

       [[  50.]],

       [[ 149.]],

       [[ 302.]]])
In [451]: np.squeeze(_)
Out[451]: array([   5.,   50.,  149.,  302.])

相关问题 更多 >

    热门问题