Ili*_*llo 14 c++ vectorization submatrix eigen
我正在研究一个MATLAB项目,我想用C++和Eigen重新实现计算量最大的部分.我想知道是否有办法执行以下操作(MATLAB语法):
B = A(A < 3);
Run Code Online (Sandbox Code Playgroud)
对于那些不熟悉MATLAB的人,上述命令初始化由A中单元格构成的矩阵B,其值小于3.
我从Eigen论坛的帖子中看到,可以通过以下方式获得感兴趣的指数:
MatrixXi indices = (A.array() < 3).cast<int>();
Run Code Online (Sandbox Code Playgroud)
我想拥有的是:
MatrixXd B = A(A.array() < 3);
Run Code Online (Sandbox Code Playgroud)
谢谢.
Ale*_*son 10
libigl为Eigen提供了许多包装器,使其更像是MATLAB.特别是,有一个slice
功能,你可以调用:
igl::slice(A,indices,B);
Run Code Online (Sandbox Code Playgroud)
这相当于MATLAB的
B = A(indices)
Run Code Online (Sandbox Code Playgroud)
您只能使用 对选定元素执行操作select()
,这相当于三元 ?: 运算符。这不完全是您想要的,但应该在许多情况下工作。
MatrixXd B = (A.array() < 3).select(operation_on(A), MatrixXd::Zero(A.rows(), A.cols()));
Run Code Online (Sandbox Code Playgroud)
如果 A<3,这将用零填充 B,否则将用 A 上的任何所需操作的结果填充。
归档时间: |
|
查看次数: |
9701 次 |
最近记录: |