使用特征的子矩阵和索引
Submatrices and indices using Eigen
我目前正在做一个MATLAB项目,我想使用C++和Eigen重新实现计算量最大的部分。我想知道是否有办法执行以下操作(MATLAB 语法):
B = A(A < 3);
对于那些不熟悉 MATLAB 的人来说,上述命令初始化由 A 中值小于 3 的单元格组成的矩阵 B。
我从 Eigen 论坛上的一篇文章中看到,可以使用以下方法获取感兴趣的索引:
MatrixXi indices = (A.array() < 3).cast<int>();
我想要的是这样的:
MatrixXd B = A(A.array() < 3);
谢谢。
libigl 为本征提供了许多包装器,使其感觉更像 MATLAB。特别是,有一个slice
函数,以便您可以调用:
igl::slice(A,indices,B);
相当于 MATLAB 的
B = A(indices)
您只能使用 select()
对选定的元素执行操作,这与三元 ?: 运算符等效。这不是您想要的,但在许多情况下应该有效。
MatrixXd B = (A.array() < 3).select(operation_on(A), MatrixXd::Zero(A.rows(), A.cols()));
如果 A<3,这将用零填充 B,否则是对 A 进行任何所需操作的结果。
目前有一个功能请求,用于通过在 Eigen BugTracker 系统上提交的索引来选择子矩阵。因此,我怀疑这种方式是否可能。
我能想到的唯一解决方法是手动复制数据。虽然不是很好。
Eigen 主分支上的最新开发允许使用数字索引。
这是一个类似的请求,显示了数字索引的示例
相关文章:
- 数组索引的值没有增加
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 查找最接近的大于当前数字的数字的索引
- 在C++中调整向量中的索引
- 重载元组索引运算符-C++
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 特征获取索引数组,其中向量中的值为真(不需要循环)
- 有没有更好的方法可以使用特征/C++实现 matlab 的逻辑索引?
- 特征:类似 numpy 的元素索引
- 是否可以从特征中的 1 开始索引矩阵?
- 特征 3 断言在求解线性系统时失败 - 据我所知,这是由于特征中的无效索引
- 如何在C 特征稀疏矩阵中访问特定(行,Col)索引
- 使用特征的子矩阵和索引
- 特征中索引的子矩阵视图
- 特征矩阵支持由向量索引吗?
- 特征矩阵库索引操作
- 特征::矩阵Xd索引排列