我有一个包含NAN值的特征矩阵A.我想得到这个矩阵与其他多个矩阵的差异之和。
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,然后取总和。
我正在考虑做自己的sum函数跳过NANs
是否有一种优雅的方式来做到这一点?
unaryExpr
是否可以用于总结我们需要&#34; out参数的位置&#34;?
答案 0 :(得分:2)
我建议首先遵循starmole推荐,但回答问题是NaN并选择适合你:
return (to-from).array().isNaN().select(0,to-from).squaredNorm();