有没有办法在 Eigen (C++) 中存储阈值操作输出?

mar*_*man 1 c++ eigen

在 MATLAB 中,您可以通过对矩阵 A 进行阈值化来创建二进制矩阵 B,如下所示:

B = A > threshold
Run Code Online (Sandbox Code Playgroud)

哪里threshold有什么价值。在 C++ 的 Eigen 中,我能够看到类似的结果,但面临无法分配输出的问题。也就是说,给定

MatrixXd M =
0 1 2
0 1 2
0 1 2
Run Code Online (Sandbox Code Playgroud)

(我知道这不是正确的初始化,但为了这个问题,就这样吧)

cout << (M < 1)
Run Code Online (Sandbox Code Playgroud)

产生

1 0 0
1 0 0
1 0 0
Run Code Online (Sandbox Code Playgroud)

MatrixXd N = M < 1;
Run Code Online (Sandbox Code Playgroud)

M = M < 1;
Run Code Online (Sandbox Code Playgroud)

两者都会给出构建错误。

有人可以解释一下将此阈值的二进制输出保存到变量的正确方法吗?

gga*_*ael 5

operator<仅在数组世界中定义,因此您必须使用.array()将您视为MatrixXdan ArrayXXd(此处没有副本),然后结果是布尔数组,因此如果您想要双精度,则必须显式转换:

MatrixXd M(3,3);
M << 0, 1, 2,
     0, 1, 2,
     0, 1, 2;
MatrixXb Rb = (M.array() < 0.5);                 // result as a matrix of bool
MatrixXd Rd = (M.array() < 0.5).cast<double>();  // result as a matrix of double
Run Code Online (Sandbox Code Playgroud)