Эффективная по памяти симметричная разреженная матрица в питоне - PullRequest
0 голосов
/ 05 декабря 2018

Я хотел бы построить очень разреженную симметричную матрицу в python, однако в scipy для этого нет представления.Итак, я пытаюсь реализовать класс, который переопределяет некоторые из методов lil_matrix, чтобы использовать такое представление в алгоритмах sklearn (например, NearestNeighbor).

У меня проблемы в основном с нарезкой, так как списокиз индексов и точная позиция легко перезаписываются.

Есть ли способ построить оставшуюся часть этой функции для работы срезов?

class sll_matrix(lil_matrix):
    def __init__(self, arg1, dtype=None):
        if isinstance(arg1, int) or isinstance(arg1,np.integer):
            lil_matrix.__init__(self, (arg1,arg1), dtype=dtype)
        elif isinstance(arg1,tuple) and isshape(arg1):
            lil_matrix.__init__(self, arg1, dtype=dtype)
        else:
            raise ValueError('invalid use of constructor. sll only use shape')
    def __getitem__(self, index):
        """Return the element(s) index=(i, j), where j may be a slice.
        This always returns a copy for consistency, since slices into
        Python lists return copies.
        """

        # Scalar fast path first
        if isinstance(index, tuple) and len(index) == 2:
            i, j = index
            if ((isinstance(i, int) or isinstance(i, np.integer)) and
                    (isinstance(j, int) or isinstance(j, np.integer))):
                if j > i:
                    i,j = swap(i,j)
                return lil_matrix.__getitem__(self, (i,j))
            # Utilities found in IndexMixin
        i, j = self._unpack_index(index)
...