将两个特征向量乘以相应的元素

问题描述 投票:0回答:2

我有两个我定义类型的特征向量(

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 循环并迭代所有元素来做到这一点。但是是否有更有效的或内置的特征函数呢?

c++ eigen
2个回答
4
投票
  1. 您应该能够通过
    .array()
    将矩阵转换为数组并在此处相乘。但它会返回一个数组表达式,所以也许这不是你想要的。

来自 Eigen 文档

首先,当然您可以将数组乘以标量,这与矩阵的工作原理相同。数组与矩阵的根本不同之处在于将两个相乘。矩阵将乘法解释为矩阵乘积,而数组将乘法解释为系数乘积。因此,当且仅当两个数组具有相同的维度时,它们才可以相乘。

  1. 否则,您可以使用矩阵的
    .cwiseProduct
    来获取矩阵作为结果。 https://eigen.tuxfamily.org/dox/group__QuickRefPage.html#matrixonly

0
投票

您可以利用 Eigen 库中的 asDiagonal() 功能。

https://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#title15

所以,对于你的情况:

vectorOne.asDiagona()*vectorTwo

应该完成这项工作。

记住:“这仅适用于向量(行向量或列向量),即在编译时已知具有一行或一列的矩阵。”

© www.soinside.com 2019 - 2024. All rights reserved.