use self.full instead of self.data.todense to avoid np.matrix type