Я хотел бы построить очень разреженную симметричную матрицу в 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)