犰狳中 find() 的补充索引
Complementary indexes to find() in Armadillo
来自 R 的犰狳和 C++ 新手的基本问题。
我有一个向量 X
,我想将 0
以下的条目设置为给定值,将大于 0
的条目设置为另一个值。 Armadillo 具有返回 indices of elements of X that are non-zero or satisfy a relational condition 的 find
函数(不合逻辑!?)所以我可以这样做:
arma::uvec ind0 = find(X < 0);
arma::uvec ind1 = find(X >= 0);
X(ind0).zeros();
X(ind1).fill(1);
这显然不是最佳解决方案。不调用 find
两次的更好方法是什么?
您可以使用 .transform() 成员函数。需要 C++11 编译器。
mat X(100,100,fill::randu);
X -= 0.5;
X.transform( [](double val) { return (val < 0) ? double(0) : double(1); } );
这就是您所需要的!它将使小于0的值等于0,大于1的值等于1。
X = clamp(X, 0, 1);
来自 R 的犰狳和 C++ 新手的基本问题。
我有一个向量 X
,我想将 0
以下的条目设置为给定值,将大于 0
的条目设置为另一个值。 Armadillo 具有返回 indices of elements of X that are non-zero or satisfy a relational condition 的 find
函数(不合逻辑!?)所以我可以这样做:
arma::uvec ind0 = find(X < 0);
arma::uvec ind1 = find(X >= 0);
X(ind0).zeros();
X(ind1).fill(1);
这显然不是最佳解决方案。不调用 find
两次的更好方法是什么?
您可以使用 .transform() 成员函数。需要 C++11 编译器。
mat X(100,100,fill::randu);
X -= 0.5;
X.transform( [](double val) { return (val < 0) ? double(0) : double(1); } );
这就是您所需要的!它将使小于0的值等于0,大于1的值等于1。
X = clamp(X, 0, 1);