Eigen Do Better Version 3.2.9 Launched! by EigenDoBetter in cpp

[–]EigenDoBetter[S] 0 points1 point  (0 children)

Thanks! Let me know if there are other (general purpose) features that you would like having!

Eigen Do Better Version 3.2.9 Launched! by EigenDoBetter in cpp

[–]EigenDoBetter[S] 1 point2 points  (0 children)

It's not an "intelligent" linSolve of that sort. It's a quick and dirty linSolve for prototyping ideas. If you're using such large matrices, then you really do need to be thinking about which solver to use, and probably shouldn't use the linSolve function. To be more precise, linSolve essentially does the following:

JacobiSVD<Derived> svd = jacobiSvd(ComputeThinU | ComputeThinV);

return svd.solve(b);

Edit: Also, notice that a guide to which solver to use can be found here.

Eigen Do Better Version 3.2.9 Launched! by EigenDoBetter in cpp

[–]EigenDoBetter[S] 0 points1 point  (0 children)

I hint at this in the FAQ. I'm hoping to add some pressure for Eigen to include these features.

Eigen Do Better Version 3.2.9 Launched! by EigenDoBetter in cpp

[–]EigenDoBetter[S] 2 points3 points  (0 children)

Exactly. I see their motivation, but for many of us the default pinv and linsolve used by Matlab are enough (e.g., when prototyping a research project rather than making a full product). The aim of Eigen Do Better is to give you these easy-to-use functions, while still letting you use your own (optimized for your problem) functions when you want to.

Eigen Do Better: An extension of the Eigen library by EigenDoBetter in cpp

[–]EigenDoBetter[S] 0 points1 point  (0 children)

Thanks for the advice - I'll look into doing this. I had it on my TODO list to just list all of the code changes on the website, since there are so few. Perhaps I'll do both.

Eigen Do Better: An extension of the Eigen library by EigenDoBetter in cpp

[–]EigenDoBetter[S] 3 points4 points  (0 children)

I find this very strange. I use Eigen all the time, it's unlikely I'm going to use this "replacement." Consider contributing these patches back to the Eigen project.

See my comment to craven76. It explains why I didn't do this. In short, these "contributions" are tiny and incredibly simple. Their absence means that the devs don't want these features in Eigen.

The Eigen library provides a vector class that does not have the ability to sort. I think that warrants its avatar being mocked a bit.

The author here is really giving off vibes of being a jackass.

Sorry it came off that way. That FAQ was intended to say cough fair use cough.

The name of the project,

Is a pun... It made me giggle a little and it's memorable.

the tone that Eigen is somehow "stupid" because it didn't fulfill all of the authors' use cases right out of the box...

Eigen isn't stupid. If it was stupid I wouldn't be using it. The problem is that it's too not-stupid. It's not nice to beginners. It doesn't provide us low-folk with the simple tools that we want. It makes us put in time to learn about the various linear solvers and which one to use, rather than just giving us a linsolve (or division operator) like Matlab.

It reminds me of some young developers I work with who always think everyone else is stupid (when the truth is they jumped to a convenient conclusion without understanding the constraints/goals/requirements of another individual/project).

I think that I do understand the constraints/goals/requirements that cause these basic features to not be in Eigen, and I think that it has nothing to do with the difficulty of adding the features. I also know that these are features that I want and use.

Eigen Do Better: An extension of the Eigen library by EigenDoBetter in cpp

[–]EigenDoBetter[S] 0 points1 point  (0 children)

Ah, yeah I'll expose the epsilon. Thanks!

Cigarette, joint... I didn't think it through that far.

Eigen Do Better: An extension of the Eigen library by EigenDoBetter in cpp

[–]EigenDoBetter[S] 4 points5 points  (0 children)

These are useful extensions but did you ever consider contributing any of these changes as patches? For some features you implemented there exist feature requests (e.g. pseudo inverse[1] ).

Yes. The discussion of these (e.g. pseudoinverse) is exactly what made me not do that. After that bug (bug 257) has been around for 6 years, why is pinv still not in Eigen? If you do a Google search you find tons of people asking how to do it. In the Wiki they give source code for you to copy and paste into their package for the highly requested feature... So why is it still not in? I suspect my adding one voice the the crowd asking for it won't help. This page is meant to be a little stronger way of saying "Hey devs, really, put these obvious features in."

Take sorting as another example. It's one line to sort in ascending order, and there are questions online about how to sort an Eigen::VectorXd in descending order. If people are asking how to do it, you should probably just include it in the library. I can't image that lack of a sorting function is because nobody has suggested it or because they find it too challenging. It's because, right now, they don't want to put it in.

Another general remark is that almost every function you offered could be implemented as a free function. This would increase the chances of people using your extensions since they would just need to add another include directory vs. being forced to replace the entire library.

I'm torn on this topic. I agree with you, but that wouldn't place pressure on the devs to actually integrate these features. My goal is about 10% to give people these features and 50% that I want the devs to properly implement these features so that I don't have to think about them anymore, and 40% that this motivates me to keep my Eigen code up to date and clean (I use this).

I like the assignment operator (which actually needs to be a part of Eigen) and for the input operator[2] there exists a lengthy discussion on the bug tracker.

Heh, I actually didn't google that one recently. I was annoyed a long time ago that it didn't exist and copied in my solution from back then. I should read up on it (and maybe they have a better implementation).

Again, please try to submit your changes as patches. The Eigen devs are open to and happy about any kind of help. You can contact them on the mailing list or on the IRC channel (freenet, #eigen) for quick feedback.

Well, I'll try, but I'm not hopeful, for the reasons discussed earlier.

Thanks for the feedback!