我想在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)