【发布时间】:2017-03-21 15:05:32
【问题描述】:
我有一个向量作为标量类型的特征矩阵,定义如下
Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic> res = Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic>::
Constant(10,
10,
Eigen::VectorXd::Zero(3));
我可以按以下方式访问和分配值
res(0,0)(0) = 1;
我正在尝试为每个第三个索引分配一个矩阵,如下所示
res(all_rows,all_cols)(0) = matrix
以下是我的代码
int main()
{
Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic> res = Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic>::
Constant(10,
10,
Eigen::VectorXd::Zero(3));
Eigen::MatrixXf x = Eigen::MatrixXf::Ones(10, 1)*2;
Eigen::MatrixXf y = Eigen::MatrixXf::Ones(10, 1);
Eigen::MatrixXf product = Eigen::MatrixXf::Zero(10, 10);
MatrixXd m(2, 2);
res(0, 0)(0) = 1;
m(0, 0) = 3;
m(1, 0) = 2.5;
m(0, 1) = -1;
m(1, 1) = m(1, 0) + m(0, 1);
product = x*y.transpose();
res.block(0,0,10,10)(0) = x*y.transpose();
}
但是当我尝试编译代码时,这一行给出了错误
res.block(0,0,10,10)(0) = x*y.transpose();
我收到以下错误。
Error C2338 THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS
有没有办法克服这个问题,还是我应该改变我的方法?
【问题讨论】:
-
您将外积 x*y^T 矩阵分配给 10x10 块的第一个元素,即 Eigen::VectorXd。看起来您正在寻找张量类型。
-
如果你使用 Eigen::VectorXd 作为标量,你必须定义几个标量操作。更好的选择是使用等级为 3 的 Eigen::Tensor,或使用通常标量(在您的情况下为双倍)的扁平矩阵(3,宽度 * 高度)