在犰狳中查找()的补充索引

Complementary indexes to find() in Armadillo

本文关键字:索引 查找      更新时间:2023-10-16

犰狳新人和R C++的基本问题。

我有一个向量X,我想将下面的条目0设置为给定值,将大于0的条目设置为另一个值。犰狳具有find函数,用于返回非零或满足关系条件(不合逻辑!?)的 X 元素的索引,所以我可以这样做:

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); 

更多信息请见:http://arma.sourceforge.net/docs.html#clamp