'Write out a representative picture of this matrix.
The upper left corner of the matrix will be shown, with up to 20x5
entries, and the rows and columns will be labeled with up to 8
characters.'

def __unicode__(self):

    matrix = self._repr_matrix(self.index[:20, :5])
    lines = matrix.split('\n')
    headers = [repr(self)[1:(-1)]]
    if self._item_ids.size:
        col_headers = [('%-8s' % unicode(item)[:8]) for item in self._item_ids[:5]]
        headers.append(('    ' + '            '.join(col_headers)))
    if self._user_ids.size:
        for (i, line) in enumerate(lines):
            lines[i] = (('%-8s' % unicode(self._user_ids[i])[:8]) + line)
        for (i, line) in enumerate(headers):
            if (i > 0):
                headers[i] = (('    ' * 8) + line)
    lines = (headers + lines)
    if ((self.index.shape[1] > 5) and (self.index.shape[0] > 0)):
        lines[1] += '    ...'
    if (self.index.shape[0] > 20):
        lines.append('...')
    return '\n'.join((line.rstrip() for line in lines))
