在 c++ 中为多维特征矩阵赋值
Assigning Values to multi dimensional Eigen matrix in c++?
我有一个特征矩阵,向量作为标量类型,定义如下
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
有没有办法克服这个问题,或者我应该改变我的方法?
您正在尝试使用 Eigen::VectorXd
作为标量类型。因此,您应该确保已按照 https://eigen.tuxfamily.org/dox-devel/TopicCustomizing_CustomScalar.html 中所述扩展Eigen::NumTraits
看起来您正在尝试重新创建多通道阵列或图像。因此,上述方法不会让您获得很多收益。更好的主意是使用秩为 3 的Eigen::Tensor
或大小(3,宽度*高度(的扁平矩阵。然后你会得到所有的特征性好处(矢量化标量操作,没有奇怪的访问模式,如(行,列((通道(等(
Eigen::Tensor<double, 3> rgb_image(height, width, 3);
Eigen::MatrixXd rgb_image(3, width*height); // Each column is a pixel color
相关文章:
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 标准库类型的赋值运算符的引用限定符
- 关于 c++ 函数中指针赋值的简单问题
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- C++ 特征:为什么可以为方法添加赋值,但不能为方法添加 Diagonal()
- 在 c++ 中为多维特征矩阵赋值
- 如何在c++中正确初始化、赋值和使用动态特征矩阵作为类成员