MatrixXd 和 VectorXd 之间的特征 C++ 矩阵乘法
Posted
技术标签:
【中文标题】MatrixXd 和 VectorXd 之间的特征 C++ 矩阵乘法【英文标题】:Eigen C++ matrix multiplication between MatrixXd and VectorXd 【发布时间】:2014-07-14 22:34:50 【问题描述】:下面是我的代码,如您所见,我正在尝试将方阵 MatrixXd 与 vectorXd 相乘。
当我尝试这个时,我收到以下错误: “二进制表达式的无效操作数('const typename ProductReturnType > >, Matrix >::Type'(又名'const GeneralProduct
我不知道出了什么问题。如果这是一个不好的问题,我很抱歉,但请帮忙!
void calcMinPortfolio(int num_ofStocks, Eigen::MatrixXd& covMatrix, Eigen::VectorXd& weights)
Eigen::MatrixXd identityMat;
identityMat.resize(num_ofStocks, num_ofStocks);
identityMat.Identity();
weights = (covMatrix.inverse() * identityMat) / (identityMat.transpose() * covMatrix.inverse() * identityMat);
【问题讨论】:
【参考方案1】:有2个问题:
1 - 构造恒等式的方式,不能在动态矩阵上使用.Identity()
(仅在编译大小指定的大小上)。只需使用单线
Eigen::MatrixXd identityMat = Eigen::MatrixXd::Identity(num_ofStocks, num_ofStocks);
2 - 分母是一般矩阵乘积(一种类型),因此不能除以矩阵。将一个矩阵除以另一个矩阵是什么意思?如果这是您想要的,请使用 .inverse()
作为分母。接下来,乘以恒等式没有任何意义,除非covMatrix
是一个标量,而事实并非如此。
PS:即使分母是一个大小为1 x 1
的矩阵,它仍然是一个矩阵类型,而不是一个标量,所以你不能用它来划分一个矩阵。如果要除以矩阵表示的标量,则使用your_expresion(0)
从1 x 1
矩阵中提取标量。
【讨论】:
是的..我是个白痴。 identityMat 应该是 1 的向量......但这绝对可以帮助我解决未来的问题。非常感谢!以上是关于MatrixXd 和 VectorXd 之间的特征 C++ 矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章
是否有一种直接、快速的方式将 list<VectorXd>“映射”到 MatrixXd?
复制列 VectorXd 以在 Eigen、C++ 中构造 MatrixXd
如何调整 Eigen::MatrixXd 的 std::vector 的大小
如何根据索引的`vector<int>`使用来自另一个`Eigen::VectorXd`向量的值初始化`Eigen::VectorXd`