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 is powerful and mature, and has lots of numerical packages built on top of it.
For example, SciKits is a suite of such packages. It incorporates scikit-learn
, 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 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 other hand, code expressed as Python loops can be slow. Additionally, it is hard to speed up Python code by using multiple threads.