def update(self, w, e):
        """
        This function make update according provided target
        and the last used input vector.

        **Args:**

        * `d` : target (float or 1-dimensional array).
            Size depends on number of MLP outputs.

        **Returns:**

        * `w` : weights of the layers (2-dimensional layer).
            Every row represents one node.
        
        * `e` : error used for update (float or 1-diemnsional array).
            Size correspond to size of input `d`.
        """
        if len(w.shape) == 1:
            e = self.activation(self.y, f=self.f, der=True) * e * w
            dw = self.mu * np.outer(e, self.x)
        else:
            e = self.activation(self.y, f=self.f, der=True) * (1 - self.y) * np.dot(e, w)
            dw = self.mu * np.outer(e, self.x)
        w = self.w[:,1:]
        self.w += dw
        return w, e