4 ms·
This depends a little on what kind of learning and explorations you want to do. I typically reach for python with some combination of jax, scipy/numpy, sympy, j
by hansvm 6y ago
This depends a little on what kind of learning and explorations you want to do. I typically reach for python with some combination of jax, scipy/numpy, sympy, jupyter, matplotlib, seaborn, networkx, cython, and I'm sure a few others that I'm missing. It's nice for a lot of problems, but in no particular order here are a few things that are lacking and might be better elsewhere:
- Complicated plots take some fiddling to get right, especially when you start adding dimensions or want to do anything nonstandard. I still don't have a volume rendering solution I'm totally happy with. This is something that "just works" for a much broader variety of plots in some environments like Mathematica.
- This doesn't usually matter for me since exploratory code rarely does more than a few billion things, so even in Python my experiments are instantaneous, but to get good performance I do have to call into an external library (numpy, networkx, etc) or drop down and cdef everything so that cython can make it fast. That isn't especially arduous (and I don't do a ton of Monte Carlo or anything where that would matter), but I've heard that's supposed to be a point Julia improves on.
- Theorem proving is only kind of okay. You have simple things like hooks into SMT solvers and whatnot, or some weak first order theorem provers, but last I checked that part of the ecosystem is underdeveloped. I wind up writing something bespoke and tailored to the problem at hand every time something like this crops up. That's not really what you want from a system helping guide your exploration of a problem.
Whichever solution you go with, I strongly recommend picking something with notebooks available. Jupyter and Mathematica really excel in this regard, and it makes interactive explorations painless in a way that even REPLs lack.