3 ms·
A lot of that is up and coming. https://github.com/DlangScience https://github.com/DlangScience [x] Plotting: http://code.dlang.org/packages/plot2kill http://
by dallbee 11y ago
A lot of that is up and coming.
https://github.com/DlangScience https://github.com/DlangScience
[x] Plotting: http://code.dlang.org/packages/plot2kill http://code.dlang.org/packages/plot2kill
[+] Optimization: Nothing directly for the purpose, but the intermediate steps are done. And a little bit of work from http://code.dlang.org/packages/atmosphere http://code.dlang.org/packages/atmosphere
[x] Probability Distributions: http://dlangscience.github.io/dstats/api/dstats/random.html http://dlangscience.github.io/dstats/api/dstats/random.html and http://dlang.org/phobos/std_mathspecial.html http://dlang.org/phobos/std_mathspecial.html
[-] Machine Learning: Not that I'm aware of, but I vaguely recall some work being done on this
[-] Financial calculations: I couldn't find anything, but I'd be surprised if this wasn't implemented already.
[x] Masked Arrays: Accomplished via language features in combination with ndslice
[x] Structured Arrays: Absolutely. Standard library support as well as a number of 3rd-party libs can do this.
[-] SVD
[?] QR: Afraid I'm not sure what you're referring to.
[+] Cholesky Decomposition: Trivial to implement
[x] Eigenvalues/Eigenvectors: Yes. SciD provides Eigens as well as two other third party packages. https://dlangscience.github.io/scid/api/scid/linalg/eigenvalues.html https://dlangscience.github.io/scid/api/scid/linalg/eigenval...
[x] Least Squares (linear): Trivial to implement, but also implemented by a few of the 2-d & 3-d graphics libraries.
[x] Least Squares (nonlinear): Nothing, but we both know that this is easily done by applying a function to your independent variable to linearize it in many cases.
[-] Levenberg Marquardt
[x] Matrix Inverse: Provided by SciD
[?] pseudoinverses: I'm afraid my math background doesn't cover that, and I couldn't find anything with a similar naming in the package repository
[x] Integration: SciD provides integration
[-] Range Kutta
[-] Interpolation: Sort of. A few of the graphics libraries have this, but it's asking a bit much to include a graphics library to do interpolation.
[-] Bsplines
[-] fft convoles
[?] Multidimensional images
[?] KDTrees: Probably in one of the 3d graphics libs
[+] Symbolic equation solvers: Some of this was done for Tango back in the day, and it has been ported, but the project looks fairly dead. https://github.com/opticron/libdmathexpr/blob/master/source/libdmathexpr/mathexpr.d https://github.com/opticron/libdmathexpr/blob/master/source/...
[x] Merge/join of data sets: Can be done efficiently and easily with core language features
Additionally, anything written for C can be trivially wrapped and used in D. An example is http://scimath.com/ http://scimath.com/, which completes much of what you mentioned.
Are they in standard libraries? SciD needs more time
Fully Documented? D tends to encourage good API documentation, and the algorithms are largely ports of "69 year old, fully debugged code".
I think you're point about "reliably email to anyone across the world" is an overstatement. Python is popular, not ubiquitous. D is obviously much less popular. Can anyone run the code? Yes. For them to modify it, they need to learn the language.
You might not care about how long computations take, but I know back at my old university there were dozens of researchers complaining about the resources that had to be spent on supercomputer time, and the annoying amount of time that many calculations involving things like molecular configurations can take. Speeding this up saves money and makes the research less painful.
"No one is ever going to use D for serious number crunching without the infrastructure in place" - Yeah, that's totally true. The infrastructure is a WIP. There's nothing wrong with that.
Your post comes across to me as being rather cynical - but why not be supportive of the good work that's being done?
- dsharlet 11y ago> [?] QR: Afraid I'm not sure what you're referring to. > [+] Cholesky Decomposition: Trivial to implement How is it that you can judge Cholesky decomposition to be trivial to implement, while being unfamiliar with QR decomposition? Cholesky decomposition is not trivial to implement well. > Your post comes across to me as being rather cynical - but why not be supportive of the good work that's being done? I had a similar experience to what's happening here myself. I worked on a project that had some very specific requirements for a high performance simulation (described by a differential equation). I worked on a very specialized piece of code for a long time to optimize this differential equation solver, eventually writing a JIT compiler to generate specialized code for each simulation. I had a D advocate come along and rather vigorously argue that D can solve this problem, without really understanding it, and missing some key requirements. This sort of comes off the same way, "a numpy replacement". numpy is big and does a lot of stuff. Like Cholesky decomposition, many of these things have trivial implementations, and then they have good implementations. The trivial implementations will take a few hours to write. The good implementations will take a few months, or even longer. Sometimes "not good" means slow, sometimes "not good" means numerical stability issues, etc. If you don't have the right background, these things may not even be obvious. This is a bit of a pattern with D folks. Several times (this, my previous experience, and others), I've gotten the impression that a D fan comes along, invests a bit of time (a few weeks, months) in a particular domain, and starts making comparisons with other tools that they only scratch the surface of. It can rub people the wrong way. edit: The symbolic expression reference in this post is another example. Computer algebra is an incredibly difficult thing to implement. I don't know of anything that is harder to implement well than a computer algebra system. Yet, you link a single file under 1000 lines as partially checking the box in your list for symbolic expression manipulation. D might be a highly productive, but it's not that productive.