I have used libNMF
before. It's written in C and is very fast. There is a paper documenting the algorithm and code.
The paper also lists several alternative packages for NMF (in bunch of different languages (which I have copied here for future reference).
- The Mathworks [3, 33]
- Cemgil [5]
- Cichocki et al. [6]
- Cichocki et al. [7]
- Hansen et al. [14]
- Hoyer [16]
- Kim et al. [19]
- Lin [25]
- Matlab/Python
- http://www.csie.ntu.edu.tw/~cjlin/nmf/index.html
- Schmidt et al. [30]
- Gaujoux [10]
- Liu [26]
- Battenberg et al. 2
- Schmitt et al. [31]
- Dhillon et al. [8]
- Greene et al. [13]
- Pathak et al. [28]
- Wang et al. [34]
Disclaimer: I have not tried any of these other packages (aside from MATLAB's).