所以我试着用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
会更理想吗?你知道吗
不能取两个
n * m
矩阵的点积,除非m == n
将两个矩阵A和B相乘时,B需要有与A相同多的行。(所以你可以把n * m
矩阵和m * n
矩阵相乘。)见this article on multiplying matrices。你知道吗
一些可能的
(n,3)
数组产品(这里我只介绍一个)元素与元素的乘积,跨列求和;
n
值。这是一个类似数量级的数字。你知道吗与
einsum
相同,它提供了对哪些轴相乘,哪些轴求和的更多控制。你知道吗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个值;即使这样,我也必须挤出多余的尺寸:相关问题 更多 >
编程相关推荐