because np.dot(W, H) is dense and has the size of X which is impossible to store when X is a big sparse matrix. makes sense?