私はNAN値を含む固有行列Aを持っています。私は、この行列の差の合計を複数の他の行列に掛けたいと思っています。NANとの固有行列和
double getDistance(const Eigen::MatrixXf& from, const Eigen::MatrixXf& to)
{
Eigen::MatrixXf difference = (to - from).cwiseAbs2();
difference = difference.unaryExpr([](float v, double& sum)
{ return std::isnan(v) ? 0.0f : v;});
double distance = difference.sum();
return distance;
}
std::vector<double> getDistances(const std::vector<Eigen::MatrixXf>& from, const Eigen::MatrixXf& to)
{
std::vector<double> distances;
for (int i = 0; i < from.size(); ++i)
{
distances.push_back(getDistance(from[i], to));
}
return distances;
}
は、今私はdifference
の一つ一つの時間をNaNを削除し、合計を取る必要があります。 NANをスキップする自分自身のサム関数を実行することを考えていました。
これを行うにはエレガントな方法がありますか?
unaryExpr
は「outパラメータ」が必要な箇所を集計しますか?
あなたは間違った質問をされることがあります。なぜあなたはナノ値を持っていますか?浮動小数点数は不良入力のデバッグ表示です。あなたは本当に一歩後退し、それらを扱う代わりに、それらが作成された時点で削除する必要があります。 – starmole
マトリックスはセンサー入力(Kinectのような深さセンサー)を表し、センサーからの悪い入力(測定不可能な距離)を表します。 それを取り除く方法はありません。実際には、有効なデータと簡単に区別してほしいと思っています。 – areimann