Here, a GMM, and associated training modules, are implemented. Because most operations are vectorized, the execution is pretty fast, and general enough to deal with high dimensional data, though GMMs are not a viable choice for extremely high dimensional data.