What about (untested):
double d = covariance.llt().matrixL().solve(data).squaredNorm();
Not that it answers your question, but this is the faster and numerically more stable way to compute it :)
How about converts to any matrix double type to its first element(top-left corner) in release mode by default, but with dimensionality check in debug mode.
On Thu, Sep 16, 2010 at 3:33 AM, <lfrfly@xxxxxxxxxxx> wrote:
It seems to me that a 1x1 matrix ought to be convertible to its internal type. Maybe it is, but if so, there's some kind of problem. Consider the computation for Mahalanobis distance:
Matrix2d covariance, covInverse;
Vector2d data;
covariance.computeInverse(&covInverse);
double mdist = data.transpose()*covInverse*data;
You would think this would work fine, since the result ix 1x1. However, it gives an error that an Eigen::Multiply cannot be converted to a double.
I can get around this by doing
double mdist = (data.transpose()*covInverse*data)[0];
but that's a bit awkward. What is the "correct" solution to this issue?
-- —— Best Wishes From Wei Li Moblie:86-13810480212 Dep. of Computer Science and Technology, Tshinghua Univ.
|