In my view, Python is a good choice for building the machine learning part (you don't say anything about the rest of your application, so I can't comment of that). [NumPy][1] is powerful and mature, and has lots of numerical packages built on top of it. For example, [SciKits][2] is a suite of such packages. It incorporates [`scikit-learn`][3], which is > a Python module integrating classic machine learning algorithms in the tightly-knit scientific Python world (numpy, scipy, matplotlib). It aims to provide simple and efficient solutions to learning problems, accessible to everybody and reusable in various contexts: machine-learning as a versatile tool for science and engineering With regards to performance, native NumPy operations are on par with their [BLAS][4] counterparts (they basically are wrappers around BLAS). Thus, NumPy code that can be expressed in terms of vector/matrix operations tends to be as fast as comparable C/Fortran code. On the flip side, code expressed as Python loops can be slow. Additionally, it is [hard to speed things up][5] by using multiple threads. However, there are ways around both of these shortcomings: using [`multiprocessing`][6] instead of threading, [`numexpr`][7], [Cython][8] and so on. [1]: https://numpy.org/ [2]: https://web.archive.org/web/20130804130142/http://projects.scipy.org:80/scikits [3]: https://scikit-learn.org/stable/ [4]: https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms [5]: https://en.wikipedia.org/wiki/Global_Interpreter_Lock [6]: https://docs.python.org/3/library/multiprocessing.html [7]: https://github.com/pydata/numexpr/ [8]: https://cython.org/