float(multiply(colVec1,colVec2).T * (matrix*matrix[i,:].T)) + c
我是Python和numpy的新手,我正在尝试理解上面的代码片段。
multiply().T
部分执行逐元素乘法,然后进行转置,结果变为行向量。
我想了解matrix[i,:]
的作用。它是通过仅选择第i行向量来创建子矩阵还是从第i行向量一直到矩阵末尾创建子矩阵?
*
执行点积,然后使用float()
将其转换为浮点数。
答案 0 :(得分:1)
是的,matrix[i, :]
会为您提供matrix
的第i行行,因为:
表示"选择此维度中的所有内容&#34 ;
不,A * B
不是A
和B
之间的点积,它是A
的元素明智产品 B
。
要获得点积,您可以使用
A.dot(B)
np.dot(A, B)
A @ B # Python 3.5+ only
只要您使用np.ndarray
类,如果您使用np.array
,np.eye
,np.zeros
等创建矩阵/数组,就会执行上述操作。 。
还有一个np.matrix
类,其中乘法运算符*
实际上是点积,但强烈建议从不使用它,因为它与混合时会产生混淆正常的数组类型。
让我们把它分解成部分。
multiply(colVec1,colVec2).T
将创建colVec1
和colVec2
的元素产品的转置。
matrix*matrix[i,:].T
是matrix
与matrix
的第i行的转置之间的元素明智产品。由于numpys广播规则,这实际上与将matrix
的每一行与其第i行相乘(元素化)相同。
我们现在可以看到,这两个表达式都将创建矩阵/数组,而不是标量。
因此,对float()
的调用将失败,因为它需要1个元素的数组或标量。
我的判决是有人使用np.matrix
类,或者解释了*
错误的使用。