来自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
?
答案 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);