如何在 C++ 中使用犰狳在多维数组之间进行按位与运算?
How to do bit-wise AND between multi-dimensional arrays using armadillo in C++?
我的任务是使用带 C++ 的犰狳在 matlab 中重写代码 is_valid = (DoG == DoG_max) & (DoG >= threshold);
。 DoG
和DoG_max
是大小相同的多维数组907 x 1210 x 5
,threshold is a scalar
.
根据documentation of armadillo, the bit-wise equal operator ==
is built-in and the bit-wise greater than operation can be replaced with the member function .clean()
就是将除高于阈值的元素之外的所有元素设置为零。
这是我的代码:
// arma::cube DoG, DoG_max; // Size: 907 x 1210 x 5.
arma::ucube is_valid(arma::size(DoG), arma::fill::zeros);
DoG.clean(threshold);
for (int s = 0; s < is_valid.n_slices; ++s) {
is_valid.slice(s) = (DoG.slice(s) == DoG_max.slice(s));
}
让我感到困惑的是按位AND运算符,犰狳没有提供。我想知道我的代码逻辑是否符合is_valid = (DoG == DoG_max) & (DoG >= threshold);
?根据我的调查,结果与matlab中的结果不同。
如果有使用Eigen的解决方案,也请告诉我!
&&
运算符在 Armadillo 中实现,但奇怪的是它没有记录。尝试将此作为您的 Matlab 代码的翻译:
ucube is_valid = (DoG == DoG_max) && (DoG >= threshold);
如果你想要标量输出,试试这个:
bool is_valid = all(vectorise((DoG == DoG_max) && (DoG >= threshold)));
C++和Matlab之间的“&”和“&&”的含义有些混淆。在C++中,“&”表示“按位与”,而“&&”表示“逻辑与”。
https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
在 Matlab 中,“&”和“&&”均表示“逻辑与”,但根据上下文的不同,其计算略有不同:What's the difference between & and && in MATLAB?
我的任务是使用带 C++ 的犰狳在 matlab 中重写代码 is_valid = (DoG == DoG_max) & (DoG >= threshold);
。 DoG
和DoG_max
是大小相同的多维数组907 x 1210 x 5
,threshold is a scalar
.
根据documentation of armadillo, the bit-wise equal operator ==
is built-in and the bit-wise greater than operation can be replaced with the member function .clean()
就是将除高于阈值的元素之外的所有元素设置为零。
这是我的代码:
// arma::cube DoG, DoG_max; // Size: 907 x 1210 x 5.
arma::ucube is_valid(arma::size(DoG), arma::fill::zeros);
DoG.clean(threshold);
for (int s = 0; s < is_valid.n_slices; ++s) {
is_valid.slice(s) = (DoG.slice(s) == DoG_max.slice(s));
}
让我感到困惑的是按位AND运算符,犰狳没有提供。我想知道我的代码逻辑是否符合is_valid = (DoG == DoG_max) & (DoG >= threshold);
?根据我的调查,结果与matlab中的结果不同。
如果有使用Eigen的解决方案,也请告诉我!
&&
运算符在 Armadillo 中实现,但奇怪的是它没有记录。尝试将此作为您的 Matlab 代码的翻译:
ucube is_valid = (DoG == DoG_max) && (DoG >= threshold);
如果你想要标量输出,试试这个:
bool is_valid = all(vectorise((DoG == DoG_max) && (DoG >= threshold)));
C++和Matlab之间的“&”和“&&”的含义有些混淆。在C++中,“&”表示“按位与”,而“&&”表示“逻辑与”。 https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B
在 Matlab 中,“&”和“&&”均表示“逻辑与”,但根据上下文的不同,其计算略有不同:What's the difference between & and && in MATLAB?