Ken*_*aul 1 c++ matrix eigen eigen3
我有一个特征矩阵,其中向量为标量类型,定义如下
Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic> res = Eigen::Matrix<Eigen::VectorXd, Eigen::Dynamic, Eigen::Dynamic>::
Constant(10,
10,
Eigen::VectorXd::Zero(3));
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式访问和分配值
res(0,0)(0) = 1;
Run Code Online (Sandbox Code Playgroud)
我试图为每个第三个索引分配一个矩阵,如下所示
res(all_rows,all_cols)(0) = matrix
Run Code Online (Sandbox Code Playgroud)
以下是我的代码
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();
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译代码时,这一行给出了错误
res.block(0,0,10,10)(0) = x*y.transpose();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
Error C2338 THIS_COEFFICIENT_ACCESSOR_TAKING_ONE_ACCESS_IS_ONLY_FOR_EXPRESSIONS_ALLOWING_LINEAR_ACCESS
Run Code Online (Sandbox Code Playgroud)
有没有办法克服这个问题,或者我应该改变我的方法?
您正在尝试用作Eigen::VectorXd标量类型。因此,您应该确保您已Eigen::NumTraits按照https://eigen.tuxfamily.org/dox-devel/TopicCustomizing_CustomScalar.html中的说明进行扩展
您似乎正在尝试重新创建多通道数组或图像。所以通过上面的方法你不会有太大收获。更好的想法是使用Eigen::Tensor3 阶的 a 或大小为 (3, width*height) 的展平矩阵。然后你会得到所有特征的好处(矢量化标量操作,没有奇怪的访问模式,如(行,列)(通道)等)
Eigen::Tensor<double, 3> rgb_image(height, width, 3);
Eigen::MatrixXd rgb_image(3, width*height); // Each column is a pixel color
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3625 次 |
| 最近记录: |