这个numpy代码片段做了什么?

时间:2016-09-02 09:39:46

标签: python numpy matrix

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

我是Python和numpy的新手,我正在尝试理解上面的代码片段。

multiply().T部分执行逐元素乘法,然后进行转置,结果变为行向量。

我想了解matrix[i,:]的作用。它是通过仅选择第i行向量来创建子矩阵还是从第i行向量一直到矩阵末尾创建子矩阵?

*执行点积,然后使用float()将其转换为浮点数。

1 个答案:

答案 0 :(得分:1)

是的,matrix[i, :]会为您提供matrix的第i行,因为:表示"选择此维度中的所有内容&#34 ;

不,A * B不是AB之间的点积,它是A元素明智产品 B。 要获得点积,您可以使用

中的任何一个
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类,或者解释了*错误的使用。