float(multiply(colVec1,colVec2).T * (matrix*matrix[i,:].T)) + c
我是Python和numpy的新手,我正在尝试理解上面的代码片段的作用。你知道吗
multiply().T
部分执行一个元素对一个元素的乘法,然后执行转置,因此结果成为一个行向量。你知道吗
我试图理解matrix[i,:]
的作用。它是通过选取第i行向量来创建子矩阵,还是从第i行向量一直到矩阵的末尾来创建子矩阵?你知道吗
*
执行点积,然后使用float()
将点积转换为浮点。你知道吗
Tags:
是的,
matrix[i, :]
将为您提供matrix
的第i:th行,因为:
表示“在这个维度中选择所有”。你知道吗不,
A * B
不是A
和B
之间的点积,它是A
和B
的元素积。 要得到点积,你可以使用只要您使用
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
类,要么把*
的用法解释错了。你知道吗相关问题 更多 >
编程相关推荐