在特征阵列上执行布尔操作
Performing boolean operations on Eigen arrays
我正在尝试在特征矩阵上使用各种布尔操作。例如,将NAN或INF值设置为特定值。或将值以上或以下设置为特定值以其他内容为单位。
我可以循环浏览每个值并执行每个布尔操作,但是我想这可能会错过矢量化,尤其是在我的C 98编译器上没有自动矢量化的情况下。
我可以使用UnaryExpr,例如
template <int replacementValue>
static float ReplaceNanWithValue(float value)
{
if (std::isnan(value) == true)
{
value = static_cast<float>(replacementValue);
}
return value;
}
matrix1 = matrix1 .unaryExpr(std::ptr_fun(ReplaceNanWithValue<1>));
但是,当我使用C 98时,我正在使用模板参数来限制正在设置NAN的值,以限制一个可以由INT表示的值,因为您无法代表在此模板参数中使用浮点或双打,我也无法将此方法与在运行时确定的值而不是编译时间一起使用。使用C 11,我可以使用匿名函数来执行此操作
const float MaxValue = pow(n, p);
matrix1 = matrix1.unaryExpr([&MaxValue](float value) { return (value > MaxValue) ? MaxValue : value; };
替代方案可能是使用Select函数。
const float MaxValue = pow(n, p);
matrix1 = (matrix1.array() > MaxValue).select(MaxValue, matrix1);
但是,与编写普通循环或C 11特定解决方案(例如匿名函数)相比,我不知道这种性能。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 提升精神:解析布尔表达式并简化为规范范式
- 对字符串进行位操作
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 线程之间的布尔停止信号
- 布尔比较运算符是如何在C++中工作的
- 变量定义到C++布尔值转换
- 我可以在 C++ 中的函数体之外进行操作吗?
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- CGAL布尔以3D网格的颜色操作
- 编译器中的布尔值为 8 位.对它们的操作是否效率低下
- 在特征阵列上执行布尔操作
- 赋值操作在C中隐式计算为什么布尔值
- 对循环和字符串函数中的指针的操作以及布尔值
- 布尔类型操作
- 有没有办法用布尔值做类似"post switch"的操作?
- 由于在返回语句中使用了布尔或操作,因此递归如何对以下代码工作
- 在boost spirit布尔表达式解析器中支持隐含的AND操作