def matrix_to_blockmatrix(self, blocksize):
        """
        turns an n*m Matrix into a (n/blocksize)*(m/blocksize matrix).
        Each element is another blocksize*blocksize matrix.
        """
        if self.get_width() % blocksize or self.get_height() % blocksize:
            raise ValueError("Number of rows and columns have to be evenly dividable by blocksize")
        selfBlocks = []
        for columnIndex in range(0, self.get_width() - 1, blocksize):
            for rowIndex in range(0, self.get_height() - 1, blocksize):
                currentBlock = []
                for blockRows in self.get_array(False)[columnIndex:columnIndex + blocksize]:
                    currentBlock += blockRows[rowIndex:rowIndex + blocksize]
                selfBlocks.append(Matrix(blocksize, blocksize, currentBlock, rowBased=False))
        return Matrix(self.get_width() / blocksize, self.get_height() / blocksize, selfBlocks, rowBased=False)
turns an n*m Matrix into a (n/blocksize)*(m/blocksize matrix).
        Each element is another blocksize*blocksize matrix.