这个numpy代码段是做什么的?

2024-04-19 23:48:30 发布

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

float(multiply(colVec1,colVec2).T * (matrix*matrix[i,:].T)) + c 

我是Python和numpy的新手,我正在尝试理解上面的代码片段的作用。你知道吗

multiply().T部分执行一个元素对一个元素的乘法,然后执行转置,因此结果成为一个行向量。你知道吗

我试图理解matrix[i,:]的作用。它是通过选取第i行向量来创建子矩阵,还是从第i行向量一直到矩阵的末尾来创建子矩阵?你知道吗

*执行点积,然后使用float()将点积转换为浮点。你知道吗


Tags: 代码numpy元素矩阵floatmatrixmultiply浮点
1条回答
网友
1楼 · 发布于 2024-04-19 23:48:30

是的,matrix[i, :]将为您提供matrix的第i:th,因为:表示“在这个维度中选择所有”。你知道吗

不,A * B不是AB之间的点积,它是AB的元素积。 要得到点积,你可以使用

A.dot(B)
np.dot(A, B)
A @ B           # Python 3.5+ only

只要您使用np.ndarray类,上述情况就是正确的,如果您使用np.arraynp.eyenp.zeros等创建了矩阵/数组,就可以这样做。 还有一个np.matrix类,其中乘法运算符*实际上是点积,但强烈建议不要使用它,因为它在与普通数组类型混合时容易造成混淆。你知道吗

那么这个表达式是怎么回事呢?

我们把它分解成几个部分。你知道吗

multiply(colVec1,colVec2).T将创建colVec1colVec2的按元素乘积的转置。你知道吗

matrix*matrix[i,:].Tmatrixmatrix的第i行转置之间的按元素乘积。由于numpys的广播规则,这实际上等同于将matrix的每一行与其第i行相乘(按元素)。你知道吗

我们现在看到的是,这两个表达式都将创建一个矩阵/数组,而不是一个标量。 因此,对float()的调用将失败,因为它需要一个1元素数组或标量。你知道吗

我的结论是,要么有人一直在使用np.matrix类,要么把*的用法解释错了。你知道吗

相关问题 更多 >