我有一個包含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