在 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)
两者都会给出构建错误。
有人可以解释一下将此阈值的二进制输出保存到变量的正确方法吗?
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)
| 归档时间: |
|
| 查看次数: |
1468 次 |
| 最近记录: |