与NAN的特征矩阵和

时间:2017-06-28 05:54:33

标签: c++ eigen

我有一个包含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;?

1 个答案:

答案 0 :(得分:2)

我建议首先遵循starmole推荐,但回答问题是NaN并选择适合你:

return (to-from).array().isNaN().select(0,to-from).squaredNorm();