我有两个我定义类型的特征向量(
vectorOne
和vectorTwo
)(请参阅下面的我的类型)。
typedef Matrix<double, 50, 1> myVector;
我想要第三个向量
vectorThree
,它将进行向量One和向量Two的乘法。但我想将每个元素乘以相应的元素 - 即向量One(i,0)乘以向量Two(i,0),这样我对所有i都有如下所示的结果。
向量三 (i, 0) = 向量一(i, 0) * 向量二(i, 0)
我看到了this并尝试了
vectorOne.array() * vectorTwo.array()
但没有成功。
我知道我可以使用 for 循环并迭代所有元素来做到这一点。但是是否有更有效的或内置的特征函数呢?
.array()
将矩阵转换为数组并在此处相乘。但它会返回一个数组表达式,所以也许这不是你想要的。来自 Eigen 文档:
首先,当然您可以将数组乘以标量,这与矩阵的工作原理相同。数组与矩阵的根本不同之处在于将两个相乘。矩阵将乘法解释为矩阵乘积,而数组将乘法解释为系数乘积。因此,当且仅当两个数组具有相同的维度时,它们才可以相乘。
.cwiseProduct
来获取矩阵作为结果。
https://eigen.tuxfamily.org/dox/group__QuickRefPage.html#matrixonly您可以利用 Eigen 库中的 asDiagonal() 功能。
https://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#title15
所以,对于你的情况:
vectorOne.asDiagona()*vectorTwo
应该完成这项工作。
记住:“这仅适用于向量(行向量或列向量),即在编译时已知具有一行或一列的矩阵。”