【问题标题】:Complementary indexes to find() in Armadillo犰狳中 find() 的补充索引
【发布时间】:2016-03-10 17:02:28
【问题描述】:

来自 R 的 Armadillo 和 C++ 新手的基本问题。

我有一个向量X,我想将0 下面的条目设置为给定值,将大于0 的条目设置为另一个值。犰狳具有返回indices of elements of X that are non-zero or satisfy a relational conditionfind 函数(不合逻辑!?)所以我可以这样做:

arma::uvec ind0 = find(X < 0);
arma::uvec ind1 = find(X >= 0);

X(ind0).zeros();
X(ind1).fill(1);

这显然不是最好的解决方案。不涉及两次调用find 的更好方法是什么?

【问题讨论】:

  • 您可以使用 std::transform 并一次执行所有更改。

标签: c++ armadillo


【解决方案1】:

您可以使用.transform() 成员函数。需要 C++11 编译器。

mat X(100,100,fill::randu);

X -= 0.5;

X.transform( [](double val) { return (val < 0) ? double(0) : double(1); } );

【讨论】:

【解决方案2】:

这就是你需要的!它将使小于 0 的值等于 0,大于 1 的值等于 1。

 X = clamp(X, 0, 1); 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多