在Armadillo找到()的补充索引

时间:2016-03-10 17:02:28

标签: c++ armadillo

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

我有一个向量public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { SayHello(); } private async void SayHello() { for (int i = 0; i < 100; i++) { await Task.Delay(1000); Console.Out.WriteLine("Hello"); } } private void bWhatUp_Click(object sender, EventArgs e) { Console.Out.WriteLine("What's up!?"); } } ,我想将X下方的条目设置为给定值,将0大于0的条目设置为另一个。犰狳有find函数返回indices of elements of X that are non-zero or satisfy a relational condition(不合逻辑!?)所以我可以这样做:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

X -= 0.5;

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

答案 1 :(得分:1)

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

 X = clamp(X, 0, 1); 

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