元素最大值和特征值中的正部分
Element-wise max and positive part in Eigen
我想取Eigen中两个向量/矩阵的元素最大值。到目前为止,我已经编写了以下代码:
template <typename S, typename T>
auto elemwise_max(const S & A, const T & B) {
return (A.array() > B.array()).select(A, B);
}
这是正确的吗,还是有更好的方法?
对于积极的部分(即max(A, 0)
),我不知道如何进行。我需要创建两种方法吗?
template <typename S>
auto positive_part_matrix(const S & A) {
auto zeros = S::Zero(A.rows(), A.cols());
return elemwise_max(A, zeros);
}
template <typename S>
auto positive_part_vec(const S & A) {
auto zeros = S::Zero(A.size());
return elemwise_max(A, zeros);
}
理想情况下,上述两者都将被称为positive_part
。
答案就在那里。
您可以移动到"阵列"世界并使用max:
A.array().max(B.array())
或使用cwiseMax:
A.cwiseMax(B)
在这两种情况下,B
可以是Matrix
或标量:
A = A.cwiseMax(0);
我想你要找的是
mat1.cwiseMax(mat2);
和
mat1.cwiseMax(0);
如文件所示
http://eigen.tuxfamily.org/dox/classEigen_1_1MatrixBase.html#aa1a53029c0ee62fb8875ce3c12151eda
它们还有一个数组接口。
http://eigen.tuxfamily.org/dox/classEigen_1_1ArrayBase.html#add2c757190d66c4d10d44b74c07a9e0f
如果你想对向量和标量/向量进行混合/最大比较,在Eigen中应该是:
- 对于Max:
vector.cwiseMax(some_scalar);
vector.cwiseMax(some_vector);
- 对于最小值:
vector.cwiseMin(some_scalar);
vector.cwiseMin(some_vector);
- 对于两者同时使用,例如饱和函数:
vector.cwiseMin(max_limit).cwiseMax(min_limit);
但是,如果您想使用矩阵进行比较,我认为您需要分别对每一行/列执行上述操作。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 如何只允许用户输入正整数
- 如何将部分流作为参数传递
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 将正态随机变量与任意 RHO(corrcoef) 相关联
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 反转阵列中的正序列
- 改变或缩放两个正态分布以具有特定的相关系数
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- 元素最大值和特征值中的正部分