我有一个包含NAN值的Eigen矩阵A.我想得到这个矩阵的差异总和多个其他矩阵。Eigen矩阵与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;
}
现在我需要删除的NaN difference
每一次再取总和。 我正在考虑做我自己的总和功能,跳过NANs。
有没有一个优雅的方式来做到这一点?
unaryExpr
难道我们需要一个“输出参数”来总结吗?
你可能会问错了问题。为什么你有nan值? nan in floats是一个错误输入的调试指示。你应该退后一步,在创建它们的地方消除它们,而不是处理它们。 – starmole
矩阵表示传感器输入(Kinect类似深度传感器),实际上表示传感器输入不良(不可测量)。 所以没有办法摆脱他们,我真的希望他们在那里很容易区分有效的数据。 – areimann